安卓系统中的SVG与PNG比较

28

在Android中处理图片的最佳方法是什么?最近在Android Lollipop中,我们提供了对SVG(可缩放矢量图形)概念的支持。在支持所有分辨率的情况下,使用图片的最佳方法是PNG(将图片放置在特定的drawable资源中)还是SVG(文件大小小且压缩效果好,可以在不失去清晰度的情况下缩放到任何大小(除非非常微小))。


2
你已经有答案了:或者SVG(小文件大小压缩得很好,可以按任意尺寸缩放而不失真) - Phantômaxx
1
在SVG中绘制复杂图像很困难。 - SuRu
矢量图形在质量方面始终优于位图。但是,就呈现速度而言,位图更快,除非呈现实现创建并缓存原生大小的位图 - 因此它非常依赖于实现方式。 - free3dom
3个回答

28

Lollipop(API 21)不支持SVG。它通过VectorDrawable类支持SVG路径绘图功能的一个子集。该类目前不受appcompat支持,因此仅在API 21上可用。

对于旧平台仍需要PNG图像,因此理想的工作流程是拥有基于矢量的源图像,您可以将其导出为各种DPI桶的PNG,并使用像svg2android这样的项目将其转换为API 21设备的VectorDrawable格式。


当您说不支持SVG但支持SVG路径绘制功能时 - 整个SVG支持集中缺失了什么? - SIr Codealot
3
你不能只是将一个“.svg”文件放入资源目录并将其作为可绘制对象引用,但是VectorDrawable支持与SVG路径数据(d属性)相同格式的android:pathData - alanv
现在支持库中已经有了VectorDrawable的支持。或者是AppCompat库?不太确定 :D - sakis kaliakoudas
3
Android支持库23.2为早期的Android系统带来了可伸缩图形功能。 - GaryAmundson
对于不支持矢量图的旧版Android,矢量资产工作室可以在构建时将您的矢量图转换为每个屏幕密度的不同位图大小。https://developer.android.com/studio/write/vector-asset-studio - Ridha Rezzag

6
您可以使用Android Support Library 23.2或更高版本。支持库中的VectorDrawableCompat类允许您在Android 2.1(API级别7)及更高版本中支持VectorDrawable。为此,在运行Vector Asset Studio之前需要按照《支持库向后兼容性》中的描述更改您的build.gradle文件。
//For Gradle Plugin 2.0+
 android {
   defaultConfig {
     vectorDrawables.useSupportLibrary = true
    }
 }

    //For Gradle Plugin 1.5 or below
    android {
      defaultConfig {
        // Stops the Gradle plugin’s automatic rasterization of vectors
        generatedDensities = []
      }
      // Flag notifies aapt to keep the attribute IDs around
      aaptOptions {
        additionalParameters "--no-version-vectors"
      }
    }

为了支持在 Android 版本低于 5.0(API 级别 21)的设备上使用矢量图形和动画矢量图形,我们提供了两个新的支持库:support-vector-drawable 和 animated-vector-drawable,分别用于支持 VectorDrawableCompat 和 AnimatedVectorDrawableCompat。
Android Studio 1.4 引入了有限的向量图兼容性支持,通过在构建时生成 PNG 文件。然而,矢量图形和动画矢量图形支持库提供了灵活性和广泛的兼容性,它是一个支持库,因此您可以将其用于所有 Android 平台版本,包括 Android 2.1(API 级别 7+)。要配置您的应用程序以使用矢量支持库,请在 app 模块的 build.gradle 文件中添加 vectorDrawables 元素。

2

Lollipop无法处理SVG文件,除非使用第三方库。

我找到的最佳解决方案是与SVG to VectorDrawable Converter一起使用BetterVectorDrawable库。

BetterVectorDrawable是Android 4.0+的VectorDrawable实现,具有在Android 5.0+上可配置的回退行为。

SVG to VectorDrawable Converter是将SVG图像批量转换为Android VectorDrawable XML资源文件的转换器。在线版本

链接指向自述文件,提供了如何使用库和转换器的足够信息。


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