Path简介
Path封装了直线曲线构成的几何路径;
可以利用Canvas的drawPath绘制;也可以用于剪裁画布,根据路径绘制文字;也可以用于描述一个图像的轮廓;
有开放和封闭路径的区别;
Paht常用方法
- **移动起点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:**矩阵变换
使用方法
moveTo、 setLastPoint、 lineTo 和 close
1 | // moveTo只改变下次操作的起点 |
addXxx与arcTo
- addXxx
1 | // 第一类(基本形状) |
rXxx方法
rXxx方法的坐标使用的是相对位置(基于当前点的位移),而之前方法的坐标是绝对位置(基于当前坐标系的坐标)
填充模式
Paint有三种样式,“描边” “填充” 以及 “描边加填充”
给一个图形内部填充颜色,首先需要分清哪一部分是外部,哪一部分是内部
Android的填充模式封装在Path中
EVEN_ODD 奇偶规则
INVERSE_EVEN_ODD 反奇偶规则
WINDING 非零环绕数规则
INVERSE_WINDING 反非零环绕数规则
- **Path关于填充模式的方法
setFillType 设置填充规则
getFillType 获取当前填充规则
isInverseFillType 判断是否是反向(INVERSE)规则
toggleInverseFillType 切换填充规则(即原有规则与反向规则之间相互切换)
Bool操作
DIFFERENCE 差集
REVERSE_DIFFERENCE 差集 与DIFFERENCE相反
INTERSECT 交集
UNION 并集
XOR 异或
- Path中的布尔运算方法
boolean op (Path path, Path.Op op)
boolean op (Path path1, Path path2, Path.Op op)
1 | // 对 path1 和 path2 执行布尔运算,运算方式由第二个参数指定,运算结果存入到path1中。 |
计算边界
Path中的方法
void computeBounds(RectF bounds,boolean exact)
bounds 测量结果会放入这个矩形
exact 是否精确测量;一般为true
重置路径
reset
出处:http://www.gcssloop.com/customview/Path_Basic
http://www.gcssloop.com/customview/Path_Over