VectorDrawable
Android L開始提供了新的API VectorDrawable 可以使用SVG類型的資源,也就是矢量圖。在xml文件中的標(biāo)簽是<vector>,下面是一個例子

這樣就定義好了一個靜態(tài)的矢量圖,可以像一般的圖片資源使用,設(shè)置到imageView中會顯示出一個心形??刂骑@示心形的就是上面path
這個標(biāo)簽,一個path
代表一個元素,繪制的內(nèi)容是pathData
下的一長串字符,里面是SVG繪制的一系列命令,提供moveTo、lineTo、close等操作,可以和Graphics 中的Path操作對應(yīng)起來,具體可以查看SVG path Ref,后面會簡要說明一下。 VectorDrawable
定義的是一張靜態(tài)圖,還有一個類AnimatedVectorDrawable
,可以讓矢量圖有動畫效果。一般需要三個步驟:
定義VectorDrawable

定義AnimatedVectorDrawable,給上面矢量圖的元素添加動畫

定義動畫文件

由于矢量圖的特點,AnimatedVectorDawable
可以實現(xiàn)一些很特別的效果,對VectorDrawable里的pathData做動畫,可以從一個圖形漸變到另一個圖形,比如Material Design里的toolbar icon;對trimPathStart、trimPathEnd做動畫,可以得到圖形的繪制軌跡。
SVG Path Data
主要有以下一些命令
M: move to 移動繪制點
L:line to 直線
Z:close 閉合
C:cubic bezier 三次貝塞爾曲線
Q:quatratic bezier 二次貝塞爾曲線
A:ellipse 圓弧
每個命令都有大小寫形式,大寫代表后面的參數(shù)是絕對坐標(biāo),小寫表示相對坐標(biāo)。參數(shù)之間用空格或逗號隔開
命令詳解:
M (x y) 移動到x,y
L (x y) 直線連到x,y,還有簡化命令H(x) 水平連接、V(y)垂直連接
Z,沒有參數(shù),連接起點和終點
C(x1 y1 x2 y2 x y),控制點x1,y1 x2,y2,終點x,y
Q(x1 y1 x y),控制點x1,y1,終點x,y
應(yīng)用
在github上看到一個VectorDrawable應(yīng)用的例子,實現(xiàn)了一個動態(tài)效果的searchbar,原理就是對VectorDrawable trimPathStart這個屬性做動畫。最初的設(shè)計在這里,照著實現(xiàn)一下:
Reference
https://developer.android.com/training/material/drawables.html
https://developer.android.com/reference/android/graphics/drawable/VectorDrawable.html
https://developer.android.com/reference/android/graphics/drawable/AnimatedVectorDrawable.html
http://www.w3.org/TR/SVG11/paths.html#PathData