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 studio用九点图 android studio 画图坐标_android

这里需要解释下这里的几个标签:

  • 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" (关闭路径)