android 图片圆角化控件
最近项目有个需求,是把图片缩放成圆形,头像都以圆形显示。
网上有好多开源代码,答题思路都是一样的,画一个圆,然后再把图片放上边去,使用PorterDuffXfermode这个类来进行设置,PorterDuffXfermode这个类如何使用,请自行搜索吧。
如何做一个自定义控件就不赘述了。我找了一个网上做好的自定义控件的类,在ondraw中去处理图片,后来发现会出现一些问题,因为ondraw中不能做复杂的操作,否则功能无法实现,需要实现的功能实现不了,所以我把处理图片放到了onSizeChanged(int w, int h, int oldw, int oldh)中区处理,ondraw就处理显示,代码如下:
public class CircleImageView extends View {
public CircleImageView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CircleImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CircleImageView(Context context) {
super(context);
}
private Bitmap bitmap;
private Paint paint = new Paint();
{
paint.setStyle(Paint.Style.STROKE);
paint.setFlags(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);// 设置画笔的锯齿效果 true是去除,大家效果就明白了
}
public void setImageBitmap(Bitmap bitmap)
{
if(this.bitmap==null && bitmap !=null){
this.bitmap=bitmap;
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
Bitmap output = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(output);
final int color = 0xff424242;
final Paint paint = new Paint();
final Rect rect = new Rect(0, 0, w, h);
final RectF rectF = new RectF(rect);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawOval(rectF, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(bitmap, null, rect, paint);
this.bitmap = output;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(bitmap, 0, 0, paint);
super.onDraw(canvas);
}
}
浙公网安备 33010602011771号