Android四种自定义圆形ImageView的方法
(2023-07-01 15:35:50)分类: androidios |
转:https://blog.csdn.net/bobo_zai/article/details/104653340
4- 四种自定义圆形ImageView的方法
BitmapShader: 使用着色器
Xfermode:使用图层叠加
ClipPath:通过对画布裁剪的方式
RoundedBitmapDrawable: 系统API圆角类
前面三种是通过继承ImageView重写onDraw()方法实现
最后一种是系统API直接使用。
每一种方式都能实现显示圆形图片, 我们主要从以下几个方面来比较各个方式的不同
实现方式难易
空白的背景
抗锯齿的能力
第1种方式:BitmapShader实现
通过对Paint(画笔)设置着色器(Shader)来实现,这里的Shader是指BitmapShader,实际上有很多的Shader,根据需要进行使用。
在这里插入图片描述
也就是说,当BitmapShader设置在画笔上的时候,画笔画出来的内容就是一张bitmap图,既然画的内容是Bitmap,那么画的形状如果是圆形,这就是一个显示圆形的ImageView了,当然也可以画圆角,画正方形。
//进行画笔初始化
private void
init() {
mPaint = new Paint();
mPaint.setAntiAlias(true);//给画笔设置抗锯齿
mMatrix = new Matrix();
//该方法千万别放到onDraw()方法里面调用,否则会不停的重绘的,因为该方法调用了invalidate() 方法
setLayerType(View.LAYER_TYPE_SOFTWARE, null);//禁用硬加速
}
//重写onDraw()方法获取BitmapDrawable进行处理
@Override
protected
void onDraw(Canvas canvas) {
Drawable drawable = getDrawable();
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
Bitmap bitmap = bitmapDrawable.getBitmap();
//通过BitmapShader的方式实现
drawRoundByShaderMode(canvas, bitmap);
} else {
super.onDraw(canvas);
}
}
private void
drawRoundByShaderMode(Canvas canvas, Bitmap bitmap) {
//获取到Bitmap的宽高
int bitmapWidth = bitmap.getWidth();
int bitmapHeight = bitmap.getHeight();
//获取到ImageView的宽高
int viewWidth = getWidth();
int viewHeight = getHeight();
//根据Bitmap生成一个BitmapShader,这里有个TileMode设置有三个参数可以选择:
//CLAMP, MIRROR, REPEAT 在后面会细说。
BitmapShader bitmapShader = new BitmapShader(bitmap,
Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
第1种方式:BitmapShader实现
通过对Paint(画笔)设置着色器(Shader)来实现,这里的Shader是指BitmapShader,实际上有很多的Shader,根据需要进行使用。
在这里插入图片描述
也就是说,当BitmapShader设置在画笔上的时候,画笔画出来的内容就是一张bitmap图,既然画的内容是Bitmap,那么画的形状如果是圆形,这就是一个显示圆形的ImageView了,当然也可以画圆角,画正方形。