利用Xfermode 自定義形狀View

❀卜卜ღ?Bruce發表於2019-03-12

可以理解為按照形狀剪下圖形。
具體步驟看下面程式碼中的註釋。

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

    }
複製程式碼

相關文章