在Android中使用矢量drawable和一组.png作为图标有啥区别?

Posted

技术标签:

【中文标题】在Android中使用矢量drawable和一组.png作为图标有啥区别?【英文标题】:What is the difference between using vector drawable and a set of .png for icons in Android?在Android中使用矢量drawable和一组.png作为图标有什么区别? 【发布时间】:2016-12-12 06:03:36 【问题描述】:

android系统图标上使用vector drawables与使用一组.png的优缺点是什么?

如果它们用于两种不同的事物,那它们是什么?

【问题讨论】:

Afaik,向量在保持原始比例的同时进行缩放。有趣的问题,我想亲自看看这个问题的答案。 这里,在“SVG 文件的注意事项”下:developer.android.com/studio/write/vector-asset-studio.html 【参考方案1】:

png 是压缩图像。它具有固定大小,如果您尝试使其更大或更小,则需要复制或删除数据。太大或太小都不好看(太大比太小更糟糕)。

矢量可绘制对象是一系列命令,告诉它如何绘制某些东西。这些命令可缩放,因此执行良好的矢量可绘制对象在 1000x1000 时看起来与在 100x100 时一样好。

png 的优点是操作简单且性能相对较快。矢量绘图速度较慢(您必须执行命令)并且更难创建一个好的。但它的扩展性更好。如果不需要缩放,那么 png 可能就是您想要的。如果是,您可能需要一个向量。

还请注意,某些类型的图像比其他图像更适合矢量 - 图标是矢量的一个很好的用途。照片不行。

【讨论】:

【参考方案2】:

Vector drawables 减少了你的 apk 的大小,因为你只有 1 个图像,而在不同的文件夹中有多个图像。它们也可以很好地缩放,这就是为什么您只需要创建 1 个矢量可绘制对象

向量的缺点是它们的性能有点重,所以你应该在几个地方使用它们

【讨论】:

*Android App Bundle 的引入解决了更大的应用程序大小问题。【参考方案3】:

除了缩放和空间因素之外,使用矢量可绘制对象,您可以实时播放和修改可绘制对象的矢量信息,这意味着您可以执行诸如变换之类的事情(例如变形图形)。使用一组 PNG,您有一个静态表示,仅此而已,您不能使用这些表单,因为它们只是静态位图(除非您对它们做了一些棘手的事情)。查看this example of path morphing 以了解您可以获得什么。请记住,使用一组 PNG 可绘制对象可以用速度来换取灵活性和空间,使用矢量可绘制对象可以获得灵活性和空间,但会损失速度(因为矢量转换是 CPU 密集型任务 - 与位图缩放相比 -)。

【讨论】:

以上是关于在Android中使用矢量drawable和一组.png作为图标有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

在 Lollipop 崩溃前使用 android vector Drawables

Android drawable-v21文件夹下xml文件,手机版本不兼容

Android - 使用 xml drawable 制作检查图标

Android Animated Vector Drawable 无法在 xml 中循环

在 Vector Drawable 中翻转 Drawable 图像

如何在 res/drawable 中创建子文件夹,就像在 android 的 mipmap 文件夹中一样? [复制]