网络测速全解析之一:自定义View基础知识(五)
常用速查表:
作用 | 相关方法 | 备注 |
移动起点 | 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 | 否 | 是 |
显然,显示更加重要一些~