一做瞪、由于png宇立、jpg圖片占用內(nèi)存大,所以從android5.0開始支持一種全新的矢量圖国撵,svg格式的圖蹈丸。這種圖優(yōu)勢大成黄,占用內(nèi)存小呐芥,且縮放后依舊清晰。那么如何使用呢奋岁?
二思瘟、設計一般會給出png及svg格式的兩種圖,如果用png格式的話闻伶,建議先用tinyPng進行壓縮后再使用滨攻,一般使用一套就可以了,不用每個分辨率下都放一套圖片蓝翰。svg格式的圖就是矢量圖光绕,導入as中是以xml文件形式存在的。導入步驟如下:
? ? ?右鍵點擊drawable文件夾 ---> 點擊new ---> 點擊Vector Asset ---> 出現(xiàn)下圖所示:
選擇Local file畜份,Name處為自己對這個xml文件的命名诞帐,Path為本地路徑,即svg圖片所在的位置漂坏。如果選擇Override的話景埃,則其Size默認大小為svg本身的大小,也可以進行按需更改顶别。選擇Enable的話谷徙,則該矢量圖會在RTL布局中自動鏡像。設置好后驯绎,點擊Next ---> 進入下個頁面后點擊finsih即建好了一個矢量圖完慧。示例:
<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>
即為一個矢量圖。
三剩失、導入矢量圖后如何使用呢屈尼?如果gradle版本比較低,可以直接使用拴孤,而不需要配置脾歧。只是,這時在高版本的android中矢量圖依舊為矢量圖演熟,但在低版本中鞭执,矢量圖會轉(zhuǎn)化為各個分辨率下的png圖片。所以芒粹,最好進行如下配置:
//在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中設置:
if (Build.VERSION.SDK_INT < BuildInfo.LOLLIPOP) {
? ? AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); //支持SVG
}
四、如果所有的Activity繼承的是AppCompatActivity的話化漆,不會有問題估脆。但如果繼承的是Activity,而且因為業(yè)務需求不可更改或者更改起來改動太大座云,這時疙赠,坑就來了付材。什么坑呢?比如棺聊,ImageView中setImageResource的是矢量圖伞租,這時不會顯示出來任何圖片。如何更改限佩?把ImageView換為AppCompatImageView即可,這是最簡單的改法裸弦。還可以把矢量圖放到selector中祟同,也可以在createview的時候進行攔截,把ImageView轉(zhuǎn)為AppCompatImageView理疙。