VectorDrawable – 它是否可用于Android的前棒棒糖版本?
背景
我注意到Android现在支持某种vector绘图,通过一个名为“ VectorDrawable ”(也AnimatedVectorDrawable ,BTW)的类。 通过查看Android-Studio上的新function,我发现了这一点。
我不知道这是否将多个文件放入多个文件夹( mdpi
, hdpi
, xhdpi
等)的xhdpi
。 这将是伟大的,可能会减less在某些情况下的应用程序大小。
问题
我想问几个关于这个新class级的问题:
-
是否有可能在较旧的Android版本中使用它,也许是通过甚至Google支持库的库?
-
我不熟悉它是如何工作的,但棒棒糖可以处理SVG文件吗? 它可以做任何可以实现的SVG文件?
-
有没有使用它的示例/教程/video,除了我发现的文档?
2016年3月更新
通过Android支持库23.2.1更新, 支持vector绘图和animationvector绘图。 (你也可以使用最新的一样)
请在gradle文件中更新库的版本。
compile 'com.android.support:recyclerview-v7:23.2.1'
Vector drawables允许你用一个在XML中定义的vectorgraphics来replace多个PNG资产 。 虽然以前仅限于棒棒糖和更高级的设备 , VectorDrawable
和AnimatedVectorDrawable
现在都可以通过两个新的支持库支持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:srcCompat
和setImageResource()
工作。
向量可从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)。
目前支持库中没有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的年龄 ”