更小的VertorDrawable

轉載請註明出處:http://www.jianshu.com/p/8d5fe7176315

本篇文章翻譯自谷歌出的優化視頻裏面的光頭佬(Colt McAnlis),原文地址需翻牆, 以下正文:

如我們所見,矢量圖(VertorDrawable)可以很好的減少我們APK的大小。它只需要一個文件就可以解決不同分辨率顯示圖片的問題,不像普通圖片那樣需要切幾套圖。但不得不說,它還可以更小。

只要處理好下面這兩步,一切都搞定。

簡化你的paths

使用矢量圖的流程包括在第三方程序創建一個SVG文件,然後通過VectorAssetStudio轉成相應的格式。但在SVG轉成VD過程種,只要你一不小心,就有可能導致最後的矢量圖變得臃腫。

1.png

這一些歸結於:Paths

Path對象是SVG和VD(VectorDrawable)所支持屬性的最小公分母。這沒什麼問題,它們都非常容易擴展,可以代表一堆圖形,使用這個屬性可以更接近你預期效果。

但這會帶來兩個大問題。

第一個,Path數據真的非常大和非常快。當你使用VD來表示一個非常複雜的圖形時,唯一的辦法是使用一個很大path來表示。即使圖形有很小的波動都可能導致很多新的path節點被加進來。

第二個,如我們之前說的那樣,Path在Android平臺上使用簡單的圖形會比柵格化更有利。默認情況下,這些矢量圖都會被柵格化軟件(例如:SKIA)轉成一個bitmap,然後上傳到texture給GPU處理。矢量圖越複雜,這個過程所花的時間就會越長。

因此,簡化你的path不僅可以減少你矢量圖的文件大小,還會加快解析矢量文件的速度。

實際上簡化你的path,是耐心的鍛鍊。像VectorAssetStudio這麼屌的工具,在處理svg到vd過程也沒有對path進行優化。由於Path數據是從SVG轉給VD的,因此,在創作階段優化是比較簡單的,無論你使用什麼工具創建SVG(好例子在這)都得在把文件導出來後,找一種方法來優化它。

這能夠確保你最後生成的VD裏面的path信息儘可能的小。

ShapeDrawables探索

可能一種更極端的優化方法是去掉所有的path。如果你可以用簡單的基本對象代表一個圖形或一張圖片,那對你的性能將有很大的提高且能減小文件的大小。這可以用ShapeDrawables實現,它可以用一些對象來表示一些圖形,而不是用默認的path來表示。

2.png

在某些情況下,這可能爲你節省一堆空間…不過它的缺點是你得自己手動編寫這些文件。不幸的是,我還沒發現有哪種工具可以讓你用所見即所得的方式來編輯這些shapes文件。你得手動在xml裏創建它們,然後在Android Studio的預覽窗口看它們長什麼樣。

不過如果你願意處理這個過程,那麼ShapeDrawables可以給你省不少空間呢。

PS:由於文人水平有限,如有翻譯得不好的地方,請留言討論。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章