1.CircleImageView类代码
public class CircleImageView extends androidx
.appcompat
.widget
.AppCompatImageView
{
private Paint mPaint
;
private
int mRadius
;
private
float mScale
;
public
CircleImageView(Context context
) {
super(context
);
}
public
CircleImageView(Context context
, @Nullable AttributeSet attrs
) {
super(context
, attrs
);
}
public
CircleImageView(Context context
, @Nullable AttributeSet attrs
, int defStyleAttr
) {
super(context
, attrs
, defStyleAttr
);
}
@Override
protected
void onMeasure(int widthMeasureSpec
, int heightMeasureSpec
) {
super
.onMeasure(widthMeasureSpec
, heightMeasureSpec
);
int size
= Math
.min(getMeasuredWidth(), getMeasuredHeight());
mRadius
= size
/ 2;
setMeasuredDimension(size
, size
);
}
@
SuppressLint("DrawAllocation")
@Override
protected
void onDraw(Canvas canvas
) {
mPaint
= new
Paint();
Drawable drawable
= getDrawable();
if (null
!= drawable
) {
Bitmap bitmap
= ((BitmapDrawable
) drawable
).getBitmap();
BitmapShader bitmapShader
= new
BitmapShader(bitmap
, Shader
.TileMode
.CLAMP
, Shader
.TileMode
.CLAMP
);
mScale
= (mRadius
* 2.0f) / Math
.min(bitmap
.getHeight(), bitmap
.getWidth());
Matrix matrix
= new
Matrix();
matrix
.setScale(mScale
, mScale
);
bitmapShader
.setLocalMatrix(matrix
);
mPaint
.setShader(bitmapShader
);
canvas
.drawCircle(mRadius
, mRadius
, mRadius
, mPaint
);
} else {
super
.onDraw(canvas
);
}
}
}
2.布局文件中使用
代码
<?xml version
="1.0" encoding
="utf-8"?>
<androidx
.constraintlayout
.widget
.ConstraintLayout xmlns
:android
="http://schemas.android.com/apk/res/android"
xmlns
:app
="http://schemas.android.com/apk/res-auto"
xmlns
:tools
="http://schemas.android.com/tools"
android
:layout_width
="match_parent"
android
:layout_height
="match_parent"
tools
:context
=".MainActivity">
<com
.hnucm18jr
.myapplication
.CircleImageView
android
:layout_width
="100dp"
android
:layout_height
="100dp"
android
:src
="@drawable/a1"
app
:layout_constraintLeft_toLeftOf
="parent"
app
:layout_constraintRight_toRightOf
="parent"
app
:layout_constraintTop_toTopOf
="parent"
android
:layout_marginTop
="200dp"/>
</androidx
.constraintlayout
.widget
.ConstraintLayout
>