Vector语法简介
Android以一种简化的方式对SVG进行了兼容,这种方式就是通过使用它的Path标签,通过Path标签,几乎可以实现SVG中的其它所有标签,虽然可能会复杂一点,但这些东西都是可以通过工具来完成的,所以,不用担心写起来会很复杂。
Path指令解析如下所示:
M = moveto(M X,Y) :将画笔移动到指定的坐标位置
L = lineto(L X,Y) :画直线到指定的坐标位置
H = horizontal lineto(H X):画水平线到指定的X坐标位置
V = vertical lineto(V Y):画垂直线到指定的Y坐标位置
C = curveto(C X1,Y1,X2,Y2,ENDX,ENDY):三次贝赛曲线
S = smooth curveto(S X2,Y2,ENDX,ENDY)
Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次贝赛曲线
T = smooth quadratic Belzier curveto(T ENDX,ENDY):映射
A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧线
Z = closepath():关闭路径
使用原则:
坐标轴为以(0,0)为中心,X轴水平向右,Y轴水平向下
所有指令大小写均可。大写绝对定位,参照全局坐标系;小写相对定位,参照前已指令x,y的值。例如:M 5,21 l7,-3 7,3 可以解释为将画笔移动到(5,21)坐标,然后画连续画两条线,一条从(5,21)画到(5+7,21-3)即(12,18),然后继续画另一条至(12+7,18+3)即(19,21),画出的效果是向上的折线
指令和数据间的空格可以省略
同一指令出现多次可以只用一个。
注意,'M'处理时,只是移动了画笔, 没有画任何东西。 它也可以在后面给出上同时绘制不连续线。
示例:
例如如下的vector
这里需要解释下这里的几个标签:
- android:width \ android:height:定义图片的宽高
- android:viewportHeight \ android:viewportWidth:定义图像被划分的比例大小,例如例子中的24,即把24dp大小的图像划分成24份(可以按照需求分割成任何份),后面Path标签中的坐标,就全部使用的是这里划分后的坐标系统。
这样做有一个非常好的作用,就是将图像大小与图像分离,后面可以随意修改图像大小,而不需要修改PathData中的坐标。
- android:fillColor:PathData中的这些属性就不详细讲了,与Canvas绘图的属性基本类似。
其语法可以如下拆解:
android:pathData="
M17,3(画笔移动到 x:17 y:3)
H7 (从x:17 y:3水平画线到 x:7 y:3)
c-1.1,0 -1.99,0.9 -1.99,2 (从x:7 y:3出发画弧线到 x:5,y:5)
L5,21 (从x:5 y:5 处开始画线到 x:5 y:21)
l7,-3 7,3 (从x:5 y:21处开始先画线到 x:12 y:18,再从x:12 y:18处开始画线到 x:19 y:21)
V5 (从x:19 y:21处开始垂直画线到x:19 y:5)
c0,-1.1 -0.9,-2 -2,-2 :(从x:19 y:5处开始画弧线到x:17 y:3)
z" (关闭路径)