【问题标题】:SVG Vs PNG on Android [closed]Android上的SVG与PNG [关闭]
【发布时间】:2014-12-29 20:03:44
【问题描述】:

这是在 Android 中处理图像的最佳方式。最近在 Android Lollipop 中,我们提供了对 SVG(可缩放矢量图形)概念的支持。这是处理图像以支持所有分辨率的最佳方式 PNG(将图像放置在特定的可绘制资源中)或 SVG(压缩良好的小文件大小,缩放到任何大小而不会失去清晰度(除了非常小))。

【问题讨论】:

  • 你已经有了答案:or SVG(Small file sizes that compress well, Scales to any size without losing clarity
  • 在 SVG 中绘制复杂的图像很困难
  • 质量方面,矢量图形总是胜过位图。但是对于渲染速度,位图更快,除非渲染实现创建并缓存原生大小的位图 - 所以它非常依赖于实现。

标签: android svg android-drawable android-5.0-lollipop


【解决方案1】:

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

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

【讨论】:

  • 当您说不支持 SVG 但支持 SVG 路径绘制功能时——整套 SVG 支持缺少什么?
  • 您不能只是将.svg 文件拖放到资源目录中并将其作为可绘制对象引用,但VectorDrawable 确实支持android:pathData 与SVG 路径数据相同的格式(@ 987654327@) 属性。
  • 现在支持库中支持 VectorDrawable。还是 AppCompat 之一?不确定:D
  • Android 支持库 23.2 为 Lollipop 之前的版本带来了可扩展的图形。
  • 对于不支持矢量绘图的旧版本 Android,Vector Asset Studio 可以在构建时将您的矢量绘图转换为每个屏幕密度的不同位图大小。 developer.android.com/studio/write/vector-asset-studio
【解决方案2】:

您可以使用 Android 支持库 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)之前的设备上支持 Vector Drawable 和 Animated Vector Drawable,VectorDrawableCompat 和 AnimatedVectorDrawableCompat 可通过两个新的支持库获得:support-vector-drawable 和 animated-vector-drawable ,分别。

Android Studio 1.4 通过在构建时生成 PNG 文件,为矢量可绘制对象引入了有限的兼容性支持。但是,矢量可绘制和动画矢量可绘制支持库提供了灵活性和广泛的兼容性——它是一个支持库,因此您可以将它用于所有 Android 平台版本,回溯到 Android 2.1(API 级别 7+)。要将您的应用配置为使用矢量支持库,请将 vectorDrawables 元素添加到应用模块中的 build.gradle 文件中。

【讨论】:

    【解决方案3】:

    Lollipop 无法处理没有第三方库的 SVG 文件。

    我找到的最佳解决方案是BetterVectorDrawable 库和SVG to VectorDrawable Converter

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

    SVG 到 VectorDrawable 转换器 是 SVG 图像到 Android VectorDrawable XML 资源文件的批量转换器。 Online version

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2012-07-09
      • 2010-09-08
      • 2014-01-05
      • 1970-01-01
      • 2010-12-24
      • 1970-01-01
      相关资源
      最近更新 更多