Rounded corner bitmaps on Android
public class RoundedCornerImageView extends ImageView {
public RoundedCornerImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {
// Round some corners betch!
Drawable maiDrawable = getDrawable();
float mCornerRadius = 6 * getContext().getResources().getDisplayMetrics().density;
if (maiDrawable instanceof BitmapDrawable && mCornerRadius > 0) {
Paint paint = ((BitmapDrawable) maiDrawable).getPaint();
final int color = 0xff000000;
final RectF rectF = new RectF(0,0,getWidth(),getHeight());
// Create an off-screen bitmap to the PorterDuff alpha blending to work right
int saveCount = canvas.saveLayer(rectF, null,
Canvas.MATRIX_SAVE_FLAG |
Canvas.CLIP_SAVE_FLAG |
Canvas.HAS_ALPHA_LAYER_SAVE_FLAG |
Canvas.FULL_COLOR_LAYER_SAVE_FLAG |
Canvas.CLIP_TO_LAYER_SAVE_FLAG);
paint.setAntiAlias(true);
canvas.drawARGB(0, 0, 0, 0);
paint.setColor(color);
canvas.drawRoundRect(rectF, mCornerRadius, mCornerRadius, paint);
Xfermode oldMode = paint.getXfermode();
// This is the paint already associated with the BitmapDrawable that super draws
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
super.onDraw(canvas);
paint.setXfermode(oldMode);
canvas.restoreToCount(saveCount);
} else {
super.onDraw(canvas);
}
}
}
注意:在GridView中的Item 为ImageView设置为圆角过程中,在没添加红色部分时,看不到圆角效果,但是如果用鼠标在屏幕上轻触拖动确显示出圆角
为什么呢?
参考:
ApiDemos示例解析(86):Graphics->Xfermodes http://www.imobilebbs.com/wordpress/?p=1657
使用PorterDuffXfermode实现遮罩层 http://lonesane.iteye.com/blog/791267
Android --- 图片的特效处理