BookPage icon indicating copy to clipboard operation
BookPage copied to clipboard

Region.Op限制

Open nxnyk opened this issue 4 years ago • 6 comments

谷歌在高版本的系统上禁止使用Region.Op除DIFFERENCE,INTERSECT外的裁减,怎么解决

nxnyk avatar Dec 15 '19 06:12 nxnyk

在高版本上用

path1.op(path2, Path.Op.REVERSE_DIFFERENCE);
canvas.clipPath(path1);

来替代类似于

canvas.clipPath(path1);
canvas.clipPath(path2, Region.Op.REVERSE_DIFFERENCE);

这样的实现

FhrShadow avatar Feb 11 '20 09:02 FhrShadow

@FhrShadow 确定能用?我这边怎么试还是空白一片,B和C区都绘画不出来

LiDevil avatar Mar 12 '20 07:03 LiDevil

已解决问题,谢谢,是我理解有点错误

LiDevil avatar Mar 12 '20 08:03 LiDevil

@LiDevil 你好,请问这个问题是怎么解决的啊?我现在是C绘制不出来,不是空白,而是黑色一片, 我裁剪C的逻辑是: canvas.clipPath(getPathB());//裁剪出PathB canvas.clipPath(pathA, Region.Op.DIFFERENCE);//裁剪出PathB中不同于PathA的区域,也就是区域B和区域C canvas.clipPath(getPathC(), Region.Op.INTERSECT);//裁剪出区域B和区域C中和PathC相同的区域,也就是区域C

itlws avatar Nov 27 '20 00:11 itlws

已解决问题,忘记把pathCPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));这局代码注释掉了

itlws avatar Nov 27 '20 00:11 itlws

关于在高版本 SDK 28 上 Region.Op 限制导致程序奔溃,以下是修复代码

`

/** * 绘制B区域内容 * * @param canvas * @param pathA */ private void drawPathBContent(Canvas canvas, Path pathA) { canvas.save(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { pathA.op(getPathC(), Path.Op.UNION);//裁剪出A和C区域的全集 pathA.op(getPathB(), Path.Op.REVERSE_DIFFERENCE);//裁剪出B区域中不同于与AC区域的部分 canvas.clipPath(pathA); } else { canvas.clipPath(pathA);//裁剪出A区域 canvas.clipPath(getPathC(), Region.Op.UNION);//裁剪出A和C区域的全集 canvas.clipPath(getPathB(), Region.Op.REVERSE_DIFFERENCE);//裁剪出B区域中不同于与AC区域的部分 } drawPathBShadow(canvas); canvas.restore(); }

`

` /** * 绘制C区域内容 * * @param canvas * @param pathA */ private void drawPathCContent(Canvas canvas, Path pathA) { canvas.save();

    //裁剪出C区域不同于A区域的部分
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
        pathA.op(getPathC(), Path.Op.REVERSE_DIFFERENCE);
        canvas.clipPath(pathA);
    } else {
        canvas.clipPath(pathA);
        canvas.clipPath(getPathC(), Region.Op.REVERSE_DIFFERENCE);
    }

以下代码过长已忽略.... `

actionbar avatar Jul 28 '21 09:07 actionbar