工作中有时会用到图片遮罩的功能,如:自定义进度条、自定义图标形状等。这些可以通过使用PorterDuffXfermode来实现。具体过程:
一、自定义组件,重写onDraw方法
二、创建一个Bitmap
三、在Bitmap上绘制第一个图层
四、在Bitmap上绘制第二个图层
五、在Canvas上绘制Bitmap
关键代码如下:
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Bitmap bitmap = Bitmap.createBitmap(400,400, Bitmap.Config.ARGB_8888);
Canvas temp = new Canvas(bitmap);
// 背景画笔
Paint bgPaint = new Paint();
bgPaint.setColor(0xcc222222);
// 绘制屏幕背景
temp.drawRect(0, 0, 400,400, bgPaint);
Paint paint = new Paint();
PorterDuffXfermode porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT);// 或者CLEAR
paint.setXfermode(porterDuffXfermode);
paint.setAntiAlias(true);
temp.drawCircle(150,150,100,paint);
// 绘制到屏幕
canvas.drawBitmap(bitmap, 0, 0, bgPaint);
bitmap.recycle();
}