更小的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:由于文人水平有限,如有翻译得不好的地方,请留言讨论。

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