眾所周知哮伟,在android5.0以后干花,谷歌推出了android矢量圖的相關(guān)使用包妄帘。 那么使用矢量圖有什么好處呢?
- 減少應(yīng)用包apk的大小池凄,減少了美工的工作量抡驼。因為不用在生成各種尺寸的圖片進(jìn)行適配。只要一套xml文件既可以解決所有的尺寸適配修赞。
- 一定程度上也減少了應(yīng)用的內(nèi)存婶恼。 當(dāng)然,也有缺點(diǎn)柏副,因為xml其實是繪制的文件,也就是使用的時候才去調(diào)用cpu進(jìn)行繪制蚣录,所以一定程度上還是會耗點(diǎn)性能割择,當(dāng)然不是很大影響。除非你的矢量圖非常復(fù)雜萎河±笥荆或者非常巨大。不過我們正常使用的矢量圖標(biāo)都是很小的虐杯,所以并沒有特別大的影響玛歌。
另外,這里還是推薦矢量圖和位圖結(jié)合使用擎椰。圖標(biāo)用矢量圖實現(xiàn)支子,對于比較大的展示圖片,還是用位圖來比較好达舒。推薦適配drawable-xxhdpi的位圖尺寸即可值朋。具體為什么,可以參考網(wǎng)上的其他文章巩搏,都有詳細(xì)的介紹昨登。 那么接下來,我們就開始講如何使用位圖贯底。
- 首先是在app主模塊的defaultConfig配置
defaultConfig { vectorDrawables.useSupportLibrary = true }
- 為了適配5.0以下的低版本丰辣,可以在application中的onCreate中加入如下方法
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); //支持SVG }
以上就是使用矢量圖需要添加的配置信息。接下來開始講使用禽捆。 首先笙什,需要有svg的圖片矢量文件,一般美工可以生成這種格式的圖片睦擂,這邊為了測試得湘,你可以上阿里的一個圖標(biāo)庫隨便下載一個svg文件,不知道的可以先了解一下阿里的iconfont顿仇。也可以直接進(jìn)入官網(wǎng) https://www.iconfont.cn/ 隨便搜索一個圖標(biāo)淘正,比如首頁圖標(biāo)摆马,可以設(shè)置不同的顏色,然后通過svg下載將svg文件下載到本地鸿吆。如下圖:
之后在android studio項目里面右建“drawable” —“New” — “Vector Asset”,打開如下界面
選擇1囤采,local file, 2的位置是文件名稱,3是本地svg文件的地址惩淳。之后點(diǎn)擊next=》finish之后蕉毯,即可在drawable文件夾下生成一個對應(yīng)的android可以使用的矢量文件xml。
有時候通過上面的方式思犁,可能生成不了對應(yīng)的VectorDrawable資源文件代虾,我推測可能是矢量圖過于復(fù)雜或者文件名包含中文等原因,android studio識別不了激蹲,所以也可以使用在線工具將svg文件轉(zhuǎn)換成VectorDrawable資源文件棉磨。
工具地址:http://inloop.github.io/svg2android/
接下來開始講生成的xml文件怎么使用。重點(diǎn)講Imageview和Textview的使用学辱。 兩者在代碼中動態(tài)添加的方式和普通圖片的添加方式都是一樣的乘瓤,這里主要講在xml布局文件里面的設(shè)置方式。 imageview必須把XML的矢量文件寫在srcCompat里面策泣。如下
<ImageView
android:id=“@+id/iv”
android:layout_width=“80dp”
android:layout_height=“80dp”
app:srcCompat=“@drawable/home_bottom_homepage_pressed” />
對于textview衙傀,在drawableTop或者drawableLeft里面直接添加矢量xml文件在5.0以下的版本是會報錯的。要想兼容5.0以下的版本萨咕,必須依附于StateListDrawable,InsetDrawable,LayerDrawable,LevelListDrawable,RotateDrawable等才能使用统抬。比如建一個selector文件,在里面加入xml矢量文件任洞。就可以在textview使用selector了蓄喇。相當(dāng)于,要先在textview的布局文件里面添加矢量圖交掏,就得再包裹一層妆偏。 以上,就是關(guān)于android矢量圖的所有矢量總結(jié)盅弛。 注:對于比較復(fù)雜的矢量圖或者比較大的矢量圖钱骂,建議還是用位圖比較好。就像上面說過的挪鹏,可以位圖和矢量圖混合使用见秽。僅適配drawable-xxhdpi即可。