下面是如何创建一个圆形裁剪区域的方法:
Path path = new Path();
path.addCircle(200,200,100,Direction.CW);
c.clipPath(path); // c is a Canvas
现在,画布上有一个裁剪区域,可以防止绘制任何超出该圆边界的内容。但是,如果我想让裁剪区域的形状像一个甜甜圈(或其他东西)呢?
我尝试创建第二个路径,并在其上使用toggleInverseFillType,然后将其添加到原始路径中,但似乎不起作用。
或者,代替使用路径,是否可以只创建一个位图用作蒙版,并以某种方式将其设置为画布上的剪切蒙版?
编辑:答案就是我所需要的,只需添加一点即可。在画布上执行多个操作时,请始终在第一个clipPath调用时使用Op.REPLACE。它将替换画布上任何现有clipPath。
作为参考,我发现了6个不同的Region.Op值的含义。想象一个有两个圆圈的维恩图。"B“是两个圆重叠的部分。"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
".“指示未绘制的零件。抱歉,如果这不是特别清楚的话。没有图形很难很好地描述。
https://stackoverflow.com/questions/9285450
复制相似问题