Android 裁剪路径问题

Android 裁剪路径问题,android,clipping,image-clipping,Android,Clipping,Image Clipping,我已经编写了自己的poly-line类,它基本上保留了一个点列表,可以使用矩阵进行修改。可以将多边形线添加到其他多边形线并在公共端点处连接。当端点等于起点时,多边形线将表示多边形 然后,我有了一种方法,通过一系列lineTo()调用迭代点列表,将多边形转化为路径对象。然后,在我的视图的onDraw方法中,该路径作为剪辑路径应用于画布 它适用于复杂的多边形,我可以画出路径来验证它的准确性 到目前为止是很好的,除了我注意到问题时,我有一个复合多边形,在中间不规则的孔。我现在应该停止称它为多边形,因为

我已经编写了自己的poly-line类,它基本上保留了一个点列表,可以使用矩阵进行修改。可以将多边形线添加到其他多边形线并在公共端点处连接。当端点等于起点时,多边形线将表示多边形

然后,我有了一种方法,通过一系列lineTo()调用迭代点列表,将多边形转化为路径对象。然后,在我的视图的onDraw方法中,该路径作为剪辑路径应用于画布

它适用于复杂的多边形,我可以画出路径来验证它的准确性

到目前为止是很好的,除了我注意到问题时,我有一个复合多边形,在中间不规则的孔。我现在应该停止称它为多边形,因为它是另一个多边形中的多边形

例如,考虑下图,其中中间的外盒和“城堡”形状都是同一路径对象的两部分,它们用作剪辑路径。#代表喷漆区域

+---------+
|#########|
|#+-+#+-+#|
|#| |#| |#|
|#| +-+ |#|
|#|     |#|
|#+-----+#|
|#########|
+---------+
我希望外部盒子外和内部“城堡”形状内的所有东西都要剪裁。我看到的问题是内部形状没有被正确剪裁。这似乎是光线跟踪算法的一个问题

任何想法都会有帮助


编辑:另外,我试着测试了每个Region.Op模式,但没有一个解决了这个问题。我想我需要采取措施来检测是否存在“漏洞”,并做一些有创意的事情。

花了几天时间玩了这个,我的问题解决了一半

我需要将Path.FillType设置为:

path.setFillType(Path.FillType.EVEN_ODD)
但是我有一个例子,正好相反,只画了中间的路径。再进行一点调查,我就可以通过添加以下内容来解决这一问题:

canvas.clipPath(path, Region.Op.DIFFERENCE);
但是,外部只有一条路径的多边形的剪辑会反转。虽然我很满意我找到了合适的书呆子旋钮来获得正确的剪辑行为,但我还没有找到一种方法来确定需要哪些剪辑方法

如果有人有什么想法可以分享,我会很高兴的。我怀疑这与向路径中添加行的顺序有关,例如内部是否定义为外部,等等