You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:18:03