一、由于png、jpg圖片占用內(nèi)存大,所以從android5.0開(kāi)始支持一種全新的矢量圖,svg格式的圖。這種圖優(yōu)勢(shì)大,占用內(nèi)存小,且縮放后依舊清晰。那么如何使用呢?
二、設(shè)計(jì)一般會(huì)給出png及svg格式的兩種圖,如果用png格式的話,建議先用tinyPng進(jìn)行壓縮后再使用,一般使用一套就可以了,不用每個(gè)分辨率下都放一套圖片。svg格式的圖就是矢量圖,導(dǎo)入as中是以xml文件形式存在的。導(dǎo)入步驟如下:
? ? ?右鍵點(diǎn)擊drawable文件夾 ---> 點(diǎn)擊new ---> 點(diǎn)擊Vector Asset ---> 出現(xiàn)下圖所示:

選擇Local file,Name處為自己對(duì)這個(gè)xml文件的命名,Path為本地路徑,即svg圖片所在的位置。如果選擇Override的話,則其Size默認(rèn)大小為svg本身的大小,也可以進(jìn)行按需更改。選擇Enable的話,則該矢量圖會(huì)在RTL布局中自動(dòng)鏡像。設(shè)置好后,點(diǎn)擊Next ---> 進(jìn)入下個(gè)頁(yè)面后點(diǎn)擊finsih即建好了一個(gè)矢量圖。示例:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
? ? ? ? android:width="14dp"
? ? ? ? android:height="14dp"
? ? ? ? android:viewportWidth="14.0"
? ? ? ? android:viewportHeight="14.0">
? ? <path
? ? ? ? android:pathData="M2.151,0.535L13.465,11.849A1.143,1.143 112.734,0 1,13.465 13.465L13.465,13.465A1.143,1.143 112.734,0 1,11.849 13.465L0.535,2.151A1.143,1.143 117.322,0 1,0.535 0.535L0.535,0.535A1.143,1.143 117.322,0 1,2.151 0.535z"
? ? ? ? android:fillType="evenOdd"
? ? ? ? android:fillColor="#B9C0C7"/>
? ? <path
? ? ? ? android:pathData="M13.465,2.151L2.151,13.465A1.143,1.143 112.257,0 1,0.535 13.465L0.535,13.465A1.143,1.143 112.257,0 1,0.535 11.849L11.849,0.535A1.143,1.143 69.355,0 1,13.465 0.535L13.465,0.535A1.143,1.143 69.355,0 1,13.465 2.151z"
? ? ? ? android:fillType="evenOdd"
? ? ? ? android:fillColor="#B9C0C7"/>
</vector>
即為一個(gè)矢量圖。
三、導(dǎo)入矢量圖后如何使用呢?如果gradle版本比較低,可以直接使用,而不需要配置。只是,這時(shí)在高版本的android中矢量圖依舊為矢量圖,但在低版本中,矢量圖會(huì)轉(zhuǎn)化為各個(gè)分辨率下的png圖片。所以,最好進(jìn)行如下配置:
//在gradle2.0及以上:
android {
? defaultConfig {
? vectorDrawables.useSupportLibrary = true
}}
//在gradle 1.5以前
android {
? defaultConfig {
? ? // Stops the Gradle plugin’s automatic rasterization of vectors
? ? generatedDensities = []
? }
? // Flag to tell aapt to keep the attribute ids around
? aaptOptions {
? ? additionalParameters "--no-version-vectors"
? }
}
然后,在Application中設(shè)置:
if (Build.VERSION.SDK_INT < BuildInfo.LOLLIPOP) {
? ? AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); //支持SVG
}
四、如果所有的Activity繼承的是AppCompatActivity的話,不會(huì)有問(wèn)題。但如果繼承的是Activity,而且因?yàn)闃I(yè)務(wù)需求不可更改或者更改起來(lái)改動(dòng)太大,這時(shí),坑就來(lái)了。什么坑呢?比如,ImageView中setImageResource的是矢量圖,這時(shí)不會(huì)顯示出來(lái)任何圖片。如何更改?把ImageView換為AppCompatImageView即可,這是最簡(jiǎn)單的改法。還可以把矢量圖放到selector中,也可以在createview的時(shí)候進(jìn)行攔截,把ImageView轉(zhuǎn)為AppCompatImageView。