Android 合并Path路径并移除相交部分边框的实现问题
Android多Path合并去相交边框解决方案
你需要使用Path类自带的布尔运算方法op(),指定并集模式即可自动移除路径相交部分的内部边框,具体实现如下:
核心实现代码(API 19+ 支持)
val p1: Path = ... // 你的第一个路径对象 val p2: Path = ... // 你的第二个路径对象 // 对两个路径执行并集运算,运算结果会直接覆盖p1 p1.op(p2, Path.Op.UNION) // 直接绘制处理后的p1即可得到预期效果 canvas.drawPath(p1, yourPaint)
原理说明
你之前使用的addPath()只是将第二个路径的矢量数据直接追加到第一个路径中,两个路径的描边逻辑完全独立,相交部分的边框不会被识别为内部边做移除。
而Path.Op.UNION模式会对两个路径的覆盖范围做并集计算,仅保留两个路径整体的外轮廓矢量点,自动剔除相交区域的内部边,刚好匹配你的需求。
效果对比
- 原有
addPath实现的实际效果:
- 使用
UNION运算后的预期效果:
低版本兼容方案(API < 19)
如果你的项目需要兼容19以下的系统版本,可以通过Region中转实现合并:
// 初始化两个Region绑定对应Path,第二个参数为Path所在的绘制区域范围 val region1 = Region().apply { setPath(p1, Region(0, 0, canvasWidth, canvasHeight)) } val region2 = Region().apply { setPath(p2, Region(0, 0, canvasWidth, canvasHeight)) } // 执行并集运算 region1.op(region2, Region.Op.UNION) // 转换为Path后绘制 val mergePath = region1.boundaryPath canvas.drawPath(mergePath, yourPaint)
内容的提问来源于stack exchange,提问作者Andranik
相关产品推荐
相关产品推荐

