处理圆角图片关键就在于使用 Paint的setXfermode
相关资料:http://blog.youkuaiyun.com/wm111/article/details/7299294
以下是改进一个前人做的圆角图片的例子,少创建一次bitmap
public static Bitmap roundCorners(final Bitmap source, final float radius) {
int width = source.getWidth();int height = source.getHeight();
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setColor(android.graphics.Color.WHITE);
Bitmap clipped = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(clipped);
canvas.drawRoundRect(new RectF(0, 0, width, height), radius, radius,
paint);
paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(source, 0, 0, paint);
source.recycle();
return clipped;
}
原例:
/*** Round the corners of a {@link Bitmap}** @param source* @param radius* @return rounded corner bitmap*/public static Bitmap roundCorners(final Bitmap source, final float radius) {int width = source.getWidth();int height = source.getHeight();Paint paint = new Paint();paint.setAntiAlias(true);paint.setColor(WHITE);Bitmap clipped = Bitmap.createBitmap(width, height, ARGB_8888);Canvas canvas = new Canvas(clipped);canvas.drawRoundRect(new RectF(0, 0, width, height), radius, radius,paint);paint.setXfermode(new PorterDuffXfermode(DST_IN));Bitmap rounded = Bitmap.createBitmap(width, height, ARGB_8888);canvas = new Canvas(rounded);canvas.drawBitmap(source, 0, 0, null);canvas.drawBitmap(clipped, 0, 0, paint);source.recycle();clipped.recycle();return rounded;}