何时使用VectorDrawable?

3

Android Lollipop引入了几个新的类,其中之一是VectorDrawable。我想知道在什么情况下使用VectorDrawable而不是位图图片,因为VectorDrawable有性能缺陷。 VectorDrawable唯一的优点是可伸缩性,但这是以性能为代价的。那么如果性能是优先考虑的因素,我什么时候可以使用VectorDrawable?性能损失是否太大?


你为什么认为使用VectorDrawable会影响性能? - pskink
@pskink VectorDrawable 被转换为位图并传递到 GPU。调整大小和创建位图图像可能会导致性能损失。 - ralph
位图?什么是位图?你在哪里读到的? - pskink
位图图像。这是链接http://m.youtube.com/watch?v=wlFVIIstKmA。 - ralph
嗯,我查看了源代码,似乎可以通过调用 setAllowCaching() 来控制缓存。哎呀,它是一个包内可见的类,不是公共的。无论如何,Google 鼓励使用该类而不是 BitmapDrawable,所以我认为他们知道自己在做什么。 - pskink
2个回答

2
请注意,与BitmapDrawable相比,VectorDrawable仅具有初始绘图性能开销。在第一帧显示出VectorDrawable后,框架将具有位图缓存。从那时起,只要大小未更改,该VectorDrawable的所有性能应与BitmapDrawable相同。
不建议使用VectorDrawable作为大型背景图像,例如全屏大小,但对于按钮和图标,其大小通常小于200dp x 200dp。您应该能够在不太担心性能的情况下使用它。

2
我认为,如果存在“性能下降”,那么这种情况是可以接受的。希望您不会在每一帧中创建大量的矢量图形。假设您只需加载VD一次,将其转换为可绘制对象,此时就不再需要矢量图形了。
实际上,我唯一能想到可能会引起问题的事情是,如果您一次性加载了过多的矢量图形,但是为什么要这样做呢?这种情况下,最好使用预定大小的精灵表之类的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接