Android從Android5.0(API level 21)開始引入了對矢量圖的支持,兩個類:VectorDrawable、AnimatedVectorDrawable。但是其並不支持SVG這種矢量圖片格式,而是以VectorDrawable的方式來實現矢量圖的效果。
VectorDrawable是一個矢量圖,定義在一個XML文件中的點、線和曲線,和它們相關顏色的信息集合。
AnimatedVectorDrawable是矢量圖動畫,使用多個XML文件而不是針對不同解析度使用多個圖片來實現動畫。
1.VectorDrawable簡介
VectorDrawable定義了一個靜態Drawable對象。和SVG格式非常相似,每個Vector圖形被定義成一個樹型結構,它由path和group對象組成。每條path包含對象輪廓的幾何形狀,每個group包含了變化的詳細信息。所有path的繪製順序和它們在XML出現的順序相同;
2.VectorDrawableXML文件生成
AndroidStudio包含一個稱為Vector Asset Studio的工具,它提供了一個簡單的方法將矢量圖以XML文件的形式添加到項目中。支持如下兩種方式:
添加Meterial Icon;導入可拉伸矢量圖(SVG)和Adobe Photoshop文檔(PSD)文件;
3.使用矢量圖的優點:
圖片擴展性:它可以進行縮放並且不損失圖片的質量,這意味著使用同一個文件對不同屏幕密度調整大小並不損失圖片的質量;(提高了安卓機型解析度適配性)
圖片大小更小:同樣大小和內容圖片下相比,矢量圖比PNG圖片更小,這樣就能得到更小的APK文件和更少的維護工作;(可減小apk安裝包的體積)
實例:小編測試應用,使用矢量圖代替png,減少了幾千張圖,apk安裝包小了10M左右。
4.缺點
系統渲染VectorDrawable需要花費更多時間。因為矢量圖的初始化加載會比相應的光柵圖片消耗更多的CPU周期,但是兩者之間的內存消耗和性能接近。因此我們可以只考慮在顯示小圖片的時候使用矢量圖(建議限制矢量圖在200*200dp),越大的圖片在屏幕上顯示會消耗更長的時間進行繪製;
實例:小編所測試應用,底部tab,僅在首次加載SVG時,相較之前時間增加50%左右。