帮我写一个裁剪圆形的ImageView
时间: 2023-08-28 21:20:09 浏览: 39
好的,以下是一个裁剪圆形的ImageView的代码示例:
```java
public class CircularImageView extends AppCompatImageView {
private Paint paint;
public CircularImageView(Context context) {
this(context, null);
}
public CircularImageView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CircularImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable != null) {
Bitmap bitmap = drawableToBitmap(drawable);
Bitmap circularBitmap = getCircularBitmap(bitmap);
canvas.drawBitmap(circularBitmap, 0, 0, null);
} else {
super.onDraw(canvas);
}
}
private Bitmap drawableToBitmap(Drawable drawable) {
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if (bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
if (drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
private Bitmap getCircularBitmap(Bitmap srcBitmap) {
int width = srcBitmap.getWidth();
int height = srcBitmap.getHeight();
int radius = Math.min(width, height) / 2;
Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
Rect rect = new Rect(0, 0, width, height);
paint.setShader(new BitmapShader(srcBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP));
canvas.drawCircle(width / 2f, height / 2f, radius, paint);
return output;
}
}
```
这个自定义View继承自AppCompatImageView,重写了onDraw()方法,使用BitmapShader和Canvas.drawCircle()方法实现了圆形裁剪效果。同时,重写了drawableToBitmap()方法,用于将Drawable转换为Bitmap。
使用这个自定义View只需要在布局文件中替换原有的ImageView,将其改为com.example.CircularImageView即可。