VectorDrawable – 它是否可用于Android的前棒棒糖版本?

背景

我注意到Android现在支持某种vector绘图,通过一个名为“ VectorDrawable ”(也AnimatedVectorDrawable ,BTW)的类。 通过查看Android-Studio上的新function,我发现了这一点。

我不知道这是否将多个文件放入多个文件夹( mdpihdpixhdpi等)的xhdpi 。 这将是伟大的,可能会减less在某些情况下的应用程序大小。

问题

我想问几个关于这个新class级的问题:

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

  2. 我不熟悉它是如何工作的,但棒棒糖可以处理SVG文件吗? 它可以做任何可以实现的SVG文件?

  3. 有没有使用它的示例/教程/video,除了我发现的文档?

2016年3月更新

通过Android支持库23.2.1更新, 支持vector绘图和animationvector绘图。 (你也可以使用最新的一样)

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

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

Vector drawables允许你用一个在XML中定义的vectorgraphicsreplace多个PNG资产虽然以前仅限于棒棒糖和更高级的设备VectorDrawableAnimatedVectorDrawable现在都可以通过两个新的支持库支持vector绘制animationvector绘制。 新的app:srcCompat属性来引用vector绘图。

在一些示例中检查github上的源代码。

v7 appcompat库的更改:

还原对vector资产的依赖关系,以便使用appcompat库的开发人员不必强制使用VectorDrawable及其关联的构build标志。

你可以试试这个支持库 。 它支持在Lollipop中引入的VectorDrawable和AnimatedVectorDrawable,完全向后兼容。

更新2 :它们在Support Library 23.4.0中再次启用它:

对于AppCompat用户,我们已经添加了一个select性的API来通过AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)从资源(23.2中的行为)重新启用支持Vector Drawables – 请记住,这仍然可以导致内存使用问题和更新configuration实例的问题,因此为什么默认情况下是禁用的。

现在检查这个23.4.0

更新 :从版本23.3.0不起作用检查这里的细节。 代理绘制不起作用。 app:srcCompatsetImageResource()工作。


向量可从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" } } 

第三 ,参考链接的答案 。

不幸的是,在这个时候,VectorDrawable和AnimatedVectorDrawable在支持库中不可用。 但是要利用Pre-Lollipop版本中的这个function,你可以使用称为MrVector的非官方backport。

MrVector在Github中可用,它将支持android版本7+。

从官方自述

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

 compile 'com.telly:mrvector:0.2.0' 

为了从vectorXML中创builddrawable,

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

希望这可以帮助。

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

我发现最好的解决scheme是与SVG到VectorDrawable转换器的BetterVectorDrawable lib。

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

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

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

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

请注意,生成的PNG文件在运行API 21以下的设备上被视为BitmapDrawables,而不是VectorDrawables,因此无法在这些设备上进行animation或类似处理。

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

为了补充一些这里的答案:是的, 你可以得到支持VectorDrawables pre-Lollipop ,至less部分。

多么偏? 这取决于 – 我已经使这个图帮助(有效的支持库23.4.0 – 至less – 25.1.0)。

VectorDrawable作弊表

目前支持库中没有VectorDrawables。

Funkystein是正确的 – VectorDrawable类似于SVG,只支持最高要求的vector绘图function,以便Android可以专注于性能。 例如,pathData与SVG的“d”string具有相同的格式。

好消息是,Google发布了Android支持库23.2支持vector绘图和animationvector绘图!

但是要感谢那些在Google之前移植这个库的人!

这是AppCompat库很棒的地方,它们可以将Android的许多新function带回早期版本。 使用新实现的VectorDrawable类,开发人员现在可以使用vector图像回到API 7(Android 2.1 Eclair)。 animationvector更为有限,仅仅和API 11(Android 3.0 Honeycomb)相差甚远,但仍然包含了当今超过97%的设备

使用指南:

请参阅@chrisbanes的“ vector的年龄 ”