可以理解为按照形状剪切图形。
具体步骤看下面代码中的注释。
Bitmap bitmap;
@Override
public void draw(Canvas canvas) {
//保存还没有绘制之前的图层
int j = canvas.saveLayer(new RectF(0,0,getRight(),getBottom()),null,Canvas.ALL_SAVE_FLAG);
super.draw(canvas);
//初始化画笔、蒙版bitmap和画布
if(bitmap == null) {
paint = new Paint();
bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_4444);
Canvas canvas1 = new Canvas(bitmap);
//在蒙版上画圆,也可以画别的形状
canvas1.drawCircle(getWidth()/2,getWidth()/2,getWidth()/2,paint);
}
//用蒙版和原图剪切,Xfermode说明可以参照我另外一篇文章
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
canvas.drawBitmap(bitmap,0,0,paint);
//恢复之前的图层,要不然背景是黑色的
canvas.restoreToCount(j);
}