国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android -- VectorDrawable、AnimatedVectorDrawable 使用詳解

2019-11-09 17:35:05
字體:
來源:轉載
供稿:網友

新年上班第一天,擼起袖子就是干!!!

嗚啦啦啦啦啦,廢話不多說,老司機,開車!

Android從5.0版本(API 21)開始支持矢量圖,引入了VectorDrawable(矢量圖) 和 AnimatedVectorDrawable(矢量圖動畫)。由于存在兼容性的問題,矢量圖在開發中的應用比較少(反正我是沒怎么用過),但是如今的開發工具(Android Studio 和 Gradle plugin)在不斷強大,兼容性的問題基本上可以滿足大部分的需求,因此,我覺得是時候充充電了,本著探討的原則,如有不當或錯誤,還請書友指正,互相學習,共同進步!!!

首先簡單說一下矢量圖的兩大優點:

1、文件占用空間小,且矢量圖形文件與分辨率和圖像大小無關,只與圖像的復雜程度有關,圖像文件所占的存儲空間較小。

2、圖像放大不失真,.即矢量圖可以無級縮放,對圖形進行縮放,旋轉或變形操作時,圖形不會產生鋸齒效果。

任何東西都不可能那么完美,有優點就會有缺點,至于其他優缺點大家可以自行百度,度娘可是啥都懂大笑

VectorDrawable的使用

話不多說,直接上碼。

1、首先創建一個矢量圖xml文件(圖1)。

圖1

矢量圖文件使用<vector>標簽,

android:width 和 android:height 分別表示圖像的寬和高;

android:viewportWidth 和 android:viewportHeight 分別表示畫布的寬和高(此處圖像的寬和高與畫布的寬和高最好保持一致,因為后面的android:pathData屬性使用的坐標系范圍與他相關)。

android:fillColor: 定義路徑的填充色

android:pathData: 矢量圖的路徑數據

2、在activity_main.xml中使用矢量圖文件(圖2)

圖2

使用矢量圖文件要注意兩點,一是增加xmlns:app命名空間,二是用app:srcCompat 替換 android:src 。

ok,矢量圖的使用就結束了,結束了。。。害羞就是這么簡單!!!

下面就是運行結果:

一架粉色的大灰機

AnimatedVectorDrawable的使用

上面我們說了VectorDrawable靜態矢量圖的用法,接下來我們就說說矢量圖動畫的使用。

還是先看碼

1、創建矢量圖xml文件(圖3)

圖3

與上面的一樣,還是<vector>標簽及屬性,在此不在贅述。我們主要看一下<group>這個標簽,group 就是 組,就是用來把多個path或者subgroup組合起來,group提供了一些屬性比如平移、旋轉、縮放,這些屬性值得變化會反應在它內部的path和subgroup元素上。

再有就是<path>下的android:name屬性,這個屬性的作用是在使用動畫時指定動畫要驅動的對象,即標記的target,唯一標識。

至于<vector>、<group><path>中的其他屬性,在文章的最后奉上,此處不在提及。

2、創建屬性動畫(圖4)

圖4

此處沒有什么好說的......

3、定義AnimatedVectorDrawableCompat的xml (圖5)

圖5

此處的要用到<animated-vector>標簽,且必須有 android:drawable 屬性,此屬性用于指定要驅動的矢量圖對象(即圖3所示xml文件);

子標簽<target>用于指定要驅動的矢量圖對象以及要使用的屬性動畫;

android:animation 指定驅動的屬性動畫(即圖4所示xml文件);

android:name 指定要驅動的矢量圖對象(即圖3)中的<path>下的android:name屬性,此處的name要保持一致。

4、在Activity中運行(圖6)

圖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;

就說這么多,在此拋磚引玉,如有不當或錯誤,還望各位大神不吝賜教!!!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥德县| 永善县| 宁阳县| 云龙县| 云梦县| 涟源市| 阿坝| 丰都县| 兴山县| 湟源县| 罗平县| 台江县| 简阳市| 栾川县| 乌拉特中旗| 图片| 崇州市| 拜泉县| 斗六市| 隆昌县| 静乐县| 延安市| 长乐市| 息烽县| 门源| 信宜市| 仲巴县| 勐海县| 珠海市| 遂宁市| 上栗县| 西华县| 黔江区| 天台县| 类乌齐县| 太保市| 舟曲县| 漠河县| 南溪县| 贵南县| 甘洛县|