packagecom.bottle.bottlelilibrary.view;importandroid.content.Context;importandroid.graphics.Bitmap;importandroid.graphics.Canvas;importandroid.graphics.Paint;importandroid.graphics.PixelFormat;importandroid.graphics.PorterDuff.Mode;importandroid.graphics.PorterDuffXfermode;importandroid.graphics.Rect;importandroid.graphics.drawable.Drawable;importandroid.util.AttributeSet;/*** 自定义ImageView,将图片转换为圆形*/
public class XCRoundImageView extendsandroid.support.v7.widget.AppCompatImageView {privatePaint paint;publicXCRoundImageView(Context context) {this(context, null);
}publicXCRoundImageView(Context context, AttributeSet attrs) {this(context, attrs, 0);
}public XCRoundImageView(Context context, AttributeSet attrs, intdefStyle) {super(context, attrs, defStyle);
paint= newPaint();
}/*** 绘制圆形图片
*
*@authorcaizhiming*/@Overrideprotected voidonDraw(Canvas canvas) {
Drawable drawable=getDrawable();if (null !=drawable) {//Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();//此方法报错
Bitmap bitmap =drawableToBitmap(drawable);//使用此方法将drawable转换成bitmap
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);
}
}/*** 将Drawable转换成bitmap
*
*@paramdrawable
*@return
*/
public staticBitmap drawableToBitmap(Drawable drawable) {int w =drawable.getIntrinsicWidth();int h =drawable.getIntrinsicHeight();
Bitmap.Config config=drawable.getOpacity()!= PixelFormat.OPAQUE ?Bitmap.Config.ARGB_8888
: Bitmap.Config.RGB_565;
Bitmap bitmap=Bitmap.createBitmap(w, h, config);//注意,下面三行代码要用到,否则在View或者SurfaceView里的canvas.drawBitmap会看不到图
Canvas canvas = newCanvas(bitmap);
drawable.setBounds(0, 0, w, h);
drawable.draw(canvas);returnbitmap;
}/*** 获取圆形图片方法
*
*@parambitmap
*@parampixels
*@returnBitmap
*@authorcaizhiming*/
private Bitmap getCircleBitmap(Bitmap bitmap, intpixels) {
Bitmap output=Bitmap.createBitmap(bitmap.getWidth(),
bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas= newCanvas(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);int x =bitmap.getWidth();
canvas.drawCircle(x/ 2, x / 2, x / 2, paint);
paint.setXfermode(newPorterDuffXfermode(Mode.SRC_IN));
canvas.drawBitmap(bitmap, rect, rect, paint);returnoutput;
}
}