Android path.op 和canvas.clipPath使用一例

因为path.op是Api19新增的,所以想要在Api19以下实现同样功能需要 采用画布的clip实现

            path.op(path2, Path.Op.DIFFERENCE);
            path.op(path3, Path.Op.UNION);
            path.op(path4, Path.Op.DIFFERENCE);

VS

            canvas.clipPath(path2, Region.Op.DIFFERENCE);
            canvas.clipPath(path3,Region.Op.UNION);
            canvas.clipPath(path4,Region.Op.DIFFERENCE);

ALL:

private void drawPathOpTest(Canvas canvas) {
        Path path = new Path();
        Path path2 = new Path();
        Path path3 = new Path();
        Path path4 = new Path();

        path.addCircle(0, 0, 200, Path.Direction.CW);//最大的圆
        path2.addRect(0, -200, 200, 200, Path.Direction.CW);//右边矩形
        path3.addCircle(0, -100, 100, Path.Direction.CW);//上面的小圆
        path4.addCircle(0, 100, 100, Path.Direction.CCW);//下面的小圆


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            path.op(path2, Path.Op.DIFFERENCE);
            path.op(path3, Path.Op.UNION);
            path.op(path4, Path.Op.DIFFERENCE);
        }else{
            /**
             * Api 19下采用画布的clip实现
             */
            canvas.clipPath(path2, Region.Op.DIFFERENCE);
            canvas.clipPath(path3,Region.Op.UNION);
            canvas.clipPath(path4,Region.Op.DIFFERENCE);
            //canvas.clipRect()

        }
        canvas.drawPath(path, mPaint);

    }

Android path.op 和canvas.clipPath使用一例_第1张图片

你可能感兴趣的:(Android)