Android開罐頭———初識VectorDrawable

什么是矢量動畫吃谣?我們?yōu)楹我褂盟鼍担咳绾紊商雍簦亢蚐VG有什么區(qū)別?

image.png

一鳖孤、矢量圖SVG和VectorDrawable

1.1 SVG和Vector差異

  • SVG----前端中使用,是一套有很多標簽的語法規(guī)范
  • Vector----在Android中使用蜘渣,Vector只實現(xiàn)了SVG語法的Path標簽

1.2 Android不直接使用SVG的原因

SVG解析效率低下淌铐,Android只使用Path標簽去繪制圖形,語句復雜但是效率大大提升了蔫缸,和canvas理由類似腿准。同時,文件體積上拾碌,vector<svg<<png

1.3 Vector語法

pathData標簽一般由字母跟數(shù)字組成吐葱,字母多為命令關鍵字(這里有個大小寫的區(qū)別,大寫的字母是基于原點坐標系的偏移量校翔,即絕對位置弟跑;小寫字母是基于當前點坐標系的偏移量,即相對位置)防症,數(shù)字多為坐標孟辑,

M(x y): 沒什么好說的,移動畫筆到指定點蔫敲,并不進行繪制饲嗽,默認在(0,0)點。與Paint里面moveTo可以理解成一樣的概念

L(l) (x y) : 畫直線奈嘿,與它類似的有H(h)V(v)貌虾。這里有一個方向的概念,pathData中的方向與View繪制的方向是一樣的裙犹。H就是畫一條橫線尽狠,V就是畫一條豎線衔憨,L就是畫點到點之間的線

Z :沒有參數(shù),就是連接起點跟終點

二袄膏、生成矢量圖VectorDrawable

2.1 as自帶

  • 右鍵res践图,選擇vector asset后選擇

2.2 svg導入

2.3 自己編寫

如下,其中android:viewportHeight表示把寬高分成幾份,這樣在pathData中可以用份數(shù)做單位沉馆,從而下次可以直接改寬高dp平项,而不用改pathData

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="200"
    android:viewportWidth="200">

    <path
        android:fillColor="#dc33cdcd"
        android:pathData="M100,100 L150,100 L150,150 L100,150 Z"/>
</vector>

效果圖就是一個青色的正方形:

效果圖.png

三、VectorDrawable兼容性

3.1 兼容性的坎坷之路

  • Android L (5.0)是它的誕生悍及,但是只允許API>=21的設備使用闽瓢,基本殘廢
  • **Gradle Plugin 1.5 **是一個里程碑,設備>=21則使用vector心赶,設備<21則將vector在編譯時轉(zhuǎn)化為png使用扣讼,局限性很大
  • AppCompat 23.2 才是真正的春天,靜態(tài)vector支持到android2.1+缨叫,動態(tài)vector支持到android3.0+椭符,于是幾乎兼容所有的設備

四、靜態(tài)VectorDrawable的配置與應用

4.1 gradle項目配置

  • app子項目的bulid.gradle下添加一句話:
android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}
  • 確保AppCompat兼容庫版本為23.2以上

  • 同時更新根目錄下bulid.gradle中的**Gradle Plugin **版本耻姥,至少要升級到2.1以上销钝,否則還是會自動轉(zhuǎn)換vector為png(原因見3.1)

classpath 'com.android.tools.build:gradle:2.3.1'

4.2 控件使用vectorDrawable

4.2.1 ImageView/ImageButton

ImageView/ImageButton設置背景,直接用標簽app:srcCompat

<ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        app:srcCompat="@drawable/ic_camera"
        />

4.2.2 Button

Button設置背景不能直接使用標簽app:srcCompat琐簇,只能利用selector標簽間接引用

  • selector文件如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/ic_rec" android:state_pressed="false"/>
    <item android:drawable="@drawable/ic_camera" android:state_pressed="true"/>

</selector>
  • Button設置背景為selector:
<Button
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/camera_imageview"
        android:background="@drawable/button_bg"/>

  • 大坑注意
    還要在代碼中加以下這句話:
static {
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}

4.3 總結(jié)

使用低版本的手機進行實驗蒸健,若是顯示成功則說明配置成功了。
最終效果圖:


vector.gif
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末婉商,一起剝皮案震驚了整個濱河市似忧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丈秩,老刑警劉巖盯捌,帶你破解...
    沈念sama閱讀 212,222評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蘑秽,居然都是意外死亡饺著,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評論 3 385
  • 文/潘曉璐 我一進店門肠牲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幼衰,“玉大人,你說我怎么就攤上這事埂材∷芩常” “怎么了汤求?”我有些...
    開封第一講書人閱讀 157,720評論 0 348
  • 文/不壞的土叔 我叫張陵俏险,是天一觀的道長严拒。 經(jīng)常有香客問我,道長竖独,這世上最難降的妖魔是什么裤唠? 我笑而不...
    開封第一講書人閱讀 56,568評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮莹痢,結(jié)果婚禮上种蘸,老公的妹妹穿的比我還像新娘。我一直安慰自己竞膳,他們只是感情好航瞭,可當我...
    茶點故事閱讀 65,696評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坦辟,像睡著了一般刊侯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锉走,一...
    開封第一講書人閱讀 49,879評論 1 290
  • 那天滨彻,我揣著相機與錄音,去河邊找鬼挪蹭。 笑死亭饵,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的梁厉。 我是一名探鬼主播辜羊,決...
    沈念sama閱讀 39,028評論 3 409
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼词顾!你這毒婦竟也來了只冻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,773評論 0 268
  • 序言:老撾萬榮一對情侶失蹤计技,失蹤者是張志新(化名)和其女友劉穎喜德,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體垮媒,經(jīng)...
    沈念sama閱讀 44,220評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡舍悯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,550評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了睡雇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片萌衬。...
    茶點故事閱讀 38,697評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖它抱,靈堂內(nèi)的尸體忽然破棺而出秕豫,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評論 4 332
  • 正文 年R本政府宣布混移,位于F島的核電站祠墅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏歌径。R本人自食惡果不足惜毁嗦,卻給世界環(huán)境...
    茶點故事閱讀 40,002評論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望回铛。 院中可真熱鬧狗准,春花似錦、人聲如沸茵肃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,782評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽验残。三九已至饼酿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胚膊,已是汗流浹背故俐。 一陣腳步聲響...
    開封第一講書人閱讀 32,010評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留紊婉,地道東北人药版。 一個月前我還...
    沈念sama閱讀 46,433評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像喻犁,于是被迫代替她去往敵國和親槽片。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,587評論 2 350

推薦閱讀更多精彩內(nèi)容