嗚啦啦啦啦啦,廢話不多說,老司機,開車!
Android從5.0版本(API 21)開始支持矢量圖,引入了VectorDrawable(矢量圖) 和 AnimatedVectorDrawable(矢量圖動畫)。由于存在兼容性的問題,矢量圖在開發中的應用比較少(反正我是沒怎么用過),但是如今的開發工具(Android Studio 和 Gradle plugin)在不斷強大,兼容性的問題基本上可以滿足大部分的需求,因此,我覺得是時候充充電了,本著探討的原則,如有不當或錯誤,還請書友指正,互相學習,共同進步!!!
首先簡單說一下矢量圖的兩大優點:
1、文件占用空間小,且矢量圖形文件與分辨率和圖像大小無關,只與圖像的復雜程度有關,圖像文件所占的存儲空間較小。
2、圖像放大不失真,.即矢量圖可以無級縮放,對圖形進行縮放,旋轉或變形操作時,圖形不會產生鋸齒效果。
任何東西都不可能那么完美,有優點就會有缺點,至于其他優缺點大家可以自行百度,度娘可是啥都懂
話不多說,直接上碼。
圖1矢量圖文件使用<vector>標簽,
android:width 和 android:height 分別表示圖像的寬和高;
android:viewportWidth 和 android:viewportHeight 分別表示畫布的寬和高(此處圖像的寬和高與畫布的寬和高最好保持一致,因為后面的android:pathData屬性使用的坐標系范圍與他相關)。
android:fillColor: 定義路徑的填充色
android:pathData: 矢量圖的路徑數據
圖2使用矢量圖文件要注意兩點,一是增加xmlns:app命名空間,二是用app:srcCompat 替換 android:src 。
ok,矢量圖的使用就結束了,結束了。。。
就是這么簡單!!!
下面就是運行結果:
一架粉色的大灰機上面我們說了VectorDrawable靜態矢量圖的用法,接下來我們就說說矢量圖動畫的使用。
還是先看碼
圖3與上面的一樣,還是<vector>標簽及屬性,在此不在贅述。我們主要看一下<group>這個標簽,group 就是 組,就是用來把多個path或者subgroup組合起來,group提供了一些屬性比如平移、旋轉、縮放,這些屬性值得變化會反應在它內部的path和subgroup元素上。
再有就是<path>下的android:name屬性,這個屬性的作用是在使用動畫時指定動畫要驅動的對象,即標記的target,唯一標識。
至于<vector>、<group>和<path>中的其他屬性,在文章的最后奉上,此處不在提及。
圖4此處沒有什么好說的......
圖5此處的要用到<animated-vector>標簽,且必須有 android:drawable 屬性,此屬性用于指定要驅動的矢量圖對象(即圖3所示xml文件);
子標簽<target>用于指定要驅動的矢量圖對象以及要使用的屬性動畫;
android:animation 指定驅動的屬性動畫(即圖4所示xml文件);
android:name 指定要驅動的矢量圖對象(即圖3)中的<path>下的android:name屬性,此處的name要保持一致。
圖6對應的xml文件
圖7好了,到這里矢量圖動畫的使用就完成了,對,就是結束了,就是這么簡單粗暴,點擊運行,你就會看到史無前例、low到爆的小圈圈動畫,沒錯,就是一個小圓圈
,圖就不貼了,代碼也全部奉上。
最后奉上
<vector>標簽中的主要屬性:
android:name 定義該drawable的名字
android:width 定義該 drawable 的內部(intrinsic)寬度,單位通常使用 dp(支持所有 Android 系統支持的尺寸)
android:height 定義該 drawable 的內部(intrinsic)高度,單位通常使用 dp(支持所有 Android 系統支持的尺寸)
android:viewportWidth 指定矢量圖畫布的寬度(即矢量圖 path 路徑數據所繪制的虛擬畫布)
android:viewportHeight 指定矢量圖畫布的高度(即矢量圖 path 路徑數據所繪制的虛擬畫布)
android:alpha 該圖片的透明度屬性
<group> 標簽中的主要屬性:
android:name 定義 group 的名字
android:translateX 定義移動 X 軸的位移。相對于 vector 的 viewport 值來指定的。
android:translateY 定義移動 Y 軸的位移。相對于 vector 的 viewport 值來指定的。
android:rotation 定義該 group 的路徑旋轉多少度
android:pivotX 定義縮放和旋轉該 group 時候的 X 參考點。該值相對于 vector 的 viewport 值來指定。
android:pivotY 定義縮放和旋轉該 group 時候的 Y 參考點。該值相對于 vector 的 viewport 值來指定。
android:scaleX 定義 X 軸的縮放倍數
android:scaleY 定義 Y 軸的縮放倍數
當我們要對多個路徑一起處理的時候,使用 group 元素把多個 path 放到一起就可以了。
由此可見, group 主要是用來設置路徑做動畫(平移、旋轉、縮放)的關鍵屬性的。
<path>標簽中的主要屬性:
android:name 定義該 path 的名字(唯一標識),用于其他地方引用;
android:pathData 這是一個神奇的東西,是用于描述矢量圖的信息;更多信息,移步SVG Path文檔參考
android:fillColor 定義填充路徑的顏色,如果沒定義則不填充;
android:strokeColor 定義如何繪制路徑邊框,如果沒有定義則不顯示邊框;
android:strokeWidth 定義路徑邊框的粗細尺寸;
android:strokeAlpha 定義路徑邊框的透明度;
android:fillAlpha 定義填充路徑顏色的透明度;
android:trimPathStart 從路徑起始位置截斷路徑的比率,取值范圍從 0 到1;
android:trimPathEnd 從路徑結束位置截斷路徑的比率,取值范圍從 0 到1;
android:trimPathOffset 設置路徑截取的范圍,范圍從0到1;
android:strokeLineCap 設置路徑線帽的形狀,取值為 butt, round, square;
android:strokeLineJoin 設置路徑交界處的連接方式,取值為 miter,round,bevel;
就說這么多,在此拋磚引玉,如有不當或錯誤,還望各位大神不吝賜教!!!
新聞熱點
疑難解答