利用Xfermode 自定义形状View

543 阅读1分钟

可以理解为按照形状剪切图形。
具体步骤看下面代码中的注释。

    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);

    }