Android 自定义ImageView 圆形图片
在 Android 中,可以通过自定义 ImageView 来实现圆形图片的效果。具体实现步骤如下:
- 继承 ImageView 类,创建一个 CircleImageView 类。
- 在 CircleImageView 类中重写 onDraw() 方法,在其中绘制圆形图片。
- 在 CircleImageView 类中添加一个 setBitmap() 方法,用于设置要显示的图片。
- 在布局文件中使用 CircleImageView 控件,并调用 setBitmap() 方法设置要显示的图片。
下面是 CircleImageView 类的代码示例:
public class CircleImageView extends ImageView {
private Bitmap mBitmap;
private Paint mPaint;
private RectF mRectF;
public CircleImageView(Context context) {
super(context);
init();
}
public CircleImageView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);
mRectF = new RectF();
}
public void setBitmap(Bitmap bitmap) {
mBitmap = bitmap;
invalidate();
}
@Override
protected void onDraw(Canvas canvas) {
if (mBitmap == null) {
return;
}
int width = getWidth();
int height = getHeight();
int radius = Math.min(width, height) / 2;
mRectF.set(0, 0, width, height);
canvas.save();
canvas.clipRect(mRectF);
canvas.drawCircle(radius, radius, radius, mPaint);
canvas.restore();
canvas.save();
canvas.clipRect(mRectF);
BitmapShader shader = new BitmapShader(mBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
mPaint.setShader(shader);
canvas.drawCircle(radius, radius, radius, mPaint);
canvas.restore();
}
}
在布局文件中,可以像下面这样使用 CircleImageView 控件:
<com.example.CirclImageView
android:id="@+id/image_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/my_image" />
在代码中,可以通过调用 setBitmap() 方法设置要显示的图片:
CircleImageView imageView = findViewById(R.id.image_view);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
imageView.setBitmap(bitmap);
``
原文地址: https://www.cveoy.top/t/topic/ffkc 著作权归作者所有。请勿转载和采集!