VectorDrawable - 它是否适用于Lollipop之前版本的Android?

时间:2014-10-24 12:56:54

标签: android gradle vector android-vectordrawable

背景

我注意到Android现在通过名为" VectorDrawable"的类来支持某种矢量绘图。 (还有AnimatedVectorDrawable,BTW)。我通过查看Android-Studio上的新内容找到了它。

我想知道这是否必须将多个文件放入多个文件夹(mdpihdpixhdpi等)。这将是很棒的,可能会在某些情况下最小化应用程序大小。

问题

我想就这个新课提出几个问题:

  1. 是否可以在较旧的Android版本中使用它,也许可以通过Google的支持库来使用它?

  2. 我不熟悉它是如何工作的,但Lollipop可以处理SVG文件吗?它能做任何可以在SVG文件上实现的东西吗?

  3. 除了我找到的文档之外,是否有使用它的示例/教程/视频?

9 个答案:

答案 0 :(得分:38)

2016年3月更新

通过Android Support Library 23.2.1更新,支持向量抽屉和动画矢量抽屉。(您也可以使用latestone)

请在gradle文件中更新库的版本。

compile 'com.android.support:recyclerview-v7:23.2.1'

Vector drawables允许您使用XML定义的单个矢量图形替换多个png资源。 虽然之前仅限于Lollipop和更高版本的设备,但VectorDrawableAnimatedVectorDrawable现在都可以通过两个新的支持库 support-vector-drawable 和< em> animated-vector-drawable。新的app:srcCompat属性,用于引用矢量drawables。

使用某些sample examples检查 github 上的来源。

v7 appcompat库的更改:

恢复对矢量资产的依赖性,以便使用appcompat库的开发人员不会被迫使用VectorDrawable及其相关的构建标记。

答案 1 :(得分:12)

您可以试试support library。它支持在Lollipop中引入的VectorDrawable和AnimatedVectorDrawable,具有完全向后兼容性。

答案 2 :(得分:11)

更新2 :他们在支持库23.4.0中再次启用它:

  

对于AppCompat用户,我们添加了一个opt-in API,通过AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)重新启用资源支持Vector Drawables(23.2中的行为) - 请记住,这仍然会导致问题内存使用情况和更新配置实例的问题,因此默认情况下禁用它。

选中此23.4.0 available now

更新:这不适用于版本23.3.0 有关详细信息,请查看here。 代理drawable不起作用。但是,app:srcCompatsetImageResource()可以正常工作。

Vector Drawable支持可从版本23.2及更高版本的支持库获得。但是,要正确使用这些drawable,必须间接引用它们。

第一个步骤将是AppCompat版本。

compile 'com.android.support:appcompat-v7:23.2.0'

第二次启用Vector Drawable支持。 如果使用Gradle插件,2.0 +

android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
}

否则

android {  
   defaultConfig {  
     generatedDensities = []  
   }  

   aaptOptions {  
     additionalParameters "--no-version-vectors"  
   }  
}

第三次,请参阅链接的answer

答案 3 :(得分:7)

补充一些答案:是的,你可以获得对Lollipop之前的VectorDrawables的支持,至少是部分的。

有多偏?这取决于 - 我已经this diagram提供帮助(对支持库23.4.0有效 - 至少 - 25.1.0)。

VectorDrawable cheatsheet

答案 4 :(得分:6)

不幸的是,此时VectorDrawable和AnimatedVectorDrawable在支持库中不可用。但要在Pre-Lollipop版本中使用此功能,您可以使用名为MrVector的非官方后端。

MrVector is available in Github它将支持Android版本7 +。

来自官方自述

要添加MrVector依赖项,请将以下行添加到build.gradle依赖项块中。

compile 'com.telly:mrvector:0.2.0'

从矢量XML创建drawable,

Drawable drawable = MrVector.inflate(getResources(), R.drawable.vector_android);

希望这有帮助。

答案 5 :(得分:3)

如果没有第三方库,Lollipop无法处理SVG文件。

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

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

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

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

答案 6 :(得分:3)

如果您使用的是VectorDrawable,Android Studio将根据Pre-Lollipop版本的PNG文件(基于您的XML文件)自动生成。

请注意,那些生成的PNG文件在运行21以下API的设备上被视为BitmapDrawables而不是VectorDrawables,因此无法在这些设备上设置动画或类似内容。

有关详细信息,请参阅“向后兼容性”: http://android-developers.blogspot.co.at/2015/09/android-studio-14.html

答案 7 :(得分:2)

目前支持库中没有VectorDrawables。

Funkystein是对的 - VectorDrawable类似于SVG,只支持最高要求的矢量绘图功能,以便android可以专注于性能。例如,pathData具有与SVG的“d”字符串相同的格式。

答案 8 :(得分:1)

好消息是谷歌发布了Android Support Library 23.2支持向量抽屉和动画矢量抽屉!

但是感谢那些在谷歌之前移植过这个库的人!

  

这是AppCompat库很棒的地方,它们可以带来很多   Android的新功能回到了更早的版本。随着   新实现的VectorDrawable类,开发人员现在可以使用vector   图像一直回到API 7(Android 2.1 Eclair)。动画   矢量有点受限,只能追溯到API 11   (Android 3.0 Honeycomb),但仍然包含超过97%的   今天正在使用的设备

使用指南:

请参阅@chrisbanes的age-of-the-vectors