圆角图片,android

public class XCRoundRectImageView extends ImageView{

private Paint paint;
Bitmap b;
public XCRoundRectImageView(Context context) {  
    this(context,null);  
}  

public XCRoundRectImageView(Context context, AttributeSet attrs) {  
    this(context, attrs,0);  
}  

public XCRoundRectImageView(Context context, AttributeSet attrs, int defStyle) {  
    super(context, attrs, defStyle); 
    paint  = new Paint();
}  

/**
 * 绘制圆角矩形图片
 * @author caizhiming
 */
@SuppressLint("DrawAllocation")
@Override  
protected void onDraw(Canvas canvas) {  

    Drawable drawable = getDrawable();  
    if (null != drawable) {  
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();  
        Bitmap b = getRoundBitmap(bitmap, 100);  
        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);  
    }  
}  

/**
 * 获取圆角矩形图片方法
 * @param bitmap
 * @param roundPx,
 * @return Bitmap
 * @author caizhiming
 */
private Bitmap getRoundBitmap(Bitmap bitmap, int roundPx) {  
         Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),  
                    bitmap.getHeight(), Config.ARGB_8888);  
            Canvas canvas = new Canvas(output);  

            final int color = 0xff424242;

            final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());  
            final RectF rectF = new RectF(rect);
            paint.setAntiAlias(true);  
            canvas.drawARGB(0, 0, 0, 0);  
            paint.setColor(color);  
            canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
            paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));  
            canvas.drawBitmap(bitmap, rect, rect, paint);  
            //检查sourcebitmap与返回的bitmap是否 一样,不一样,回收source bitmap
           /* if (output != bitmap) {
                Logger.writeLog(Logger.INODE, Logger.Debug, "auth xcround loginicon not same ,recycle old.");

                bitmap.recycle();
            }*/


    return output;  


}  

/**
 * 当view视图重绘的时候执行的
 */
@Override
public void invalidate() {
     b = null; 
     if (b != null) 
     { 
         b.recycle(); 
         b = null; 
     } 
    super.invalidate();
}

猜你喜欢

转载自blog.csdn.net/wjh823177094/article/details/54973384