参考:http://www.cnblogs.com/JczmDeveloper/p/3873043.html
先建一个类去继承Imageview,新建一个Paint (作用未知),完成3个构造函数。
private Paint paint;
public CircleImageview(Context context) {
this(context, null);
}
public CircleImageview(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CircleImageview(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
}
写一个方法把Bitmap变成圆型:
private Bitmap getCircleBitmap(Bitmap bitmap, int pixels) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(output); //应该是背景颜色透明的意思 final int color = 0xff424242; //定义一个矩形区域 final Rect rect = new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()); //抗锯齿 让图片清晰一点 paint.setAntiAlias(true); //设置图片的背景颜色 canvas.drawARGB(0,0,0,0); //不知设置了什么颜色 paint.setColor(color); //获取了bitmap的宽度 int x = bitmap.getWidth(); //cx:圆心的x坐标。cy:圆心的y坐标。radius:圆的半径。paint:绘制时所使用的画笔。 canvas.drawCircle(x / 2, x / 2, x / 2, paint); //略高深 待研究 paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); //把传入的bitmap进行处理 canvas.drawBitmap(bitmap, rect, rect, paint); return output; }
重写ondraw方法:
protected void onDraw(Canvas canvas) { Drawable drawable = getDrawable(); if (drawable != null) { Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); Bitmap b = getCircleBitmap(bitmap, 14); final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight()); final Rect rectDest = new Rect(0, 0, getWidth(), getHeight()); paint.reset(); canvas.drawBitmap(b, rectSrc, rectDest, paint); } else { super.onDraw(canvas); } }
画出来是椭圆的。。为啥:
待解决