常用速查表:
| 作用 | 相关方法 | 备注 |
| 移动起点 | moveTo | 移动下一次操作的起点位置 |
| 设置终点 | setLastPoint | 重置当前path中最后一个点位置,如果在绘制之前调用,效果和moveTo相同 |
| 连接直线 | lineTo | 添加上一个点到当前点之间的直线到Path |
| 闭合路径 | close | 连接第一个点连接到最后一个点,形成一个闭合区域 |
| 添加内容 | addRect, addRoundRect, addOval, addCircle, addPath, addArc, arcTo | 添加(矩形, 圆角矩形, 椭圆, 圆, 路径, 圆弧) 到当前Path (注意addArc和arcTo的区别) |
| 是否为空 | isEmpty | 判断Path是否为空 |
| 是否为矩形 | isRect | 判断path是否是一个矩形 |
| 替换路径 | set | 用新的路径替换到当前路径所有内容 |
| 偏移路径 | offset | 对当前路径之前的操作进行偏移(不会影响之后的操作) |
| 贝塞尔曲线 | quadTo, cubicTo | 分别为二次和三次贝塞尔曲线的方法 |
| rXxx方法 | rMoveTo, rLineTo, rQuadTo, rCubicTo | 不带r的方法是基于原点的坐标系(偏移量), rXxx方法是基于当前点坐标系(偏移量) |
| 填充模式 | setFillType, getFillType, isInverseFillType, toggleInverseFillType | 设置,获取,判断和切换填充模式 |
| 提示方法 | incReserve | 提示Path还有多少个点等待加入(这个方法貌似会让Path优化存储结构) |
| 布尔操作(API19) | op | 对两个Path进行布尔运算(即取交集、并集等操作) |
| 计算边界 | computeBounds | 计算Path的边界 |
| 重置路径 | reset, rewind |
清除Path中的内容 reset不保留内部数据结构,但会保留FillType. rewind会保留内部的数据结构,但不保留FillType |
| 矩阵操作 | transform | 矩阵变换 |
一、Path方法详解

就是说使用rXxx这样的方法,就相当于在之前的坐标的基础上移动了相应的x值和y值。而不带r的这种,就是参考之前的坐标系的一个点。


Xxx rXxx
填充模式:描边、填充、描边+填充
判断是否是图形内部方法:奇偶规则、非零环绕数规则

图示:




Android中的填充模式
Android中的填充模式有四种,是封装在Path中的一个枚举。
| 模式 | 简介 |
| EVEN_ODD | 奇偶规则 |
| INVERSE_EVEN_ODD | 反奇偶规则 |
| WINDING | 非零环绕数规则 |
| INVERSE_WINDING | 反非零环绕数规则 |
只需要记住反非零环绕数规则效果:

布尔操作(op):

布尔操作是两个Path之间的运算,主要作用是用一些简单的图形通过一些规则合成一些相对比较复杂,或难以直接得到的图形。
Path的布尔运算有五种逻辑,如下:
| 逻辑名称 | 类比 | 说明 | 示意图 |
| DIFFERENCE | 差集 | Path1中减去Path2后剩下的部分 | ![]() |
| REVERSE_DIFFERENCE | 差集 | Path2中减去Path1后剩下的部分 | ![]() |
| INTERSECT | 交集 | Path1与Path2相交的部分 | ![]() |
| UNION | 并集 | 包含全部Path1和Path2 | ![]() |
| XOR | 异或 | 包含Path1与Path2但不包括两者相交的部分 | ![]() |
重置路径
重置Path有两个方法,分别是reset和rewind,两者区别主要有一下两点:
| 方法 | 是否保留FillType设置 | 是否保留原有数据结构 |
| reset | 是 | 否 |
| rewind | 否 | 是 |

显然,显示更加重要一些~
博客介绍了Android中Path方法,使用rXxx方法是在原坐标基础上移动,不带r则参考之前坐标系的点。还提及填充模式有描边、填充等,判断图形内部有奇偶规则等。介绍了Path的布尔操作,用于合成复杂图形,最后讲解了重置Path的reset和rewind方法。





5413

被折叠的 条评论
为什么被折叠?



