Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas
现在有上防止绘制圆的边界之外的任何画布剪切区域。但是,如果我想让裁剪区域的形状像甜甜圈(或其他)呢?
我试着玩弄创建第二个路径并在其上使用toggleInverseFillType,然后将其添加到原始路径,但似乎没有工作。
另外,不是使用路径,而是可以创建一个位图用作掩码并以某种方式将其设置为Canvas上的剪贴蒙版?
编辑:答案正是我需要一个小的补充。在画布上进行多个操作时,请始终在第一个clipPath调用中使用Op.REPLACE。这将替换该Canvas上任何现有的clipPath。
作为参考,这里是我发现了6个不同的Region.Op值的含义。想象一下带有2个圆圈的维恩图。 “B”是2个圆圈重叠的部分。 “A”是不重叠的左圆。 “C”是不重叠的右圆。
c.clipPath(a,Region.Op.REPLACE);
c.clipPath(b,???);
Region.Op.DIFFERENCE -> A..
Region.Op.INTERSECT -> .B.
Region.Op.REPLACE -> .BC
Region.Op.REVERSE_DIFFERENCE -> ..C
Region.Op.UNION -> ABC
Region.Op.XOR -> A.C
“。”表示未画出的部分。对不起,如果这不是特别清楚。没有图形很难描述。