android bitmap.createbitmap 圆,自定义圆形ImageView(解决Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap...

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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值