我注意到Android现在通过名为" VectorDrawable"的类来支持某种矢量绘图。 (还有AnimatedVectorDrawable,BTW)。我通过查看Android-Studio上的新内容找到了它。
我想知道这是否必须将多个文件放入多个文件夹(mdpi
,hdpi
,xhdpi
等)。这将是很棒的,可能会在某些情况下最小化应用程序大小。
我想就这个新课提出几个问题:
是否可以在较旧的Android版本中使用它,也许可以通过Google的支持库来使用它?
我不熟悉它是如何工作的,但Lollipop可以处理SVG文件吗?它能做任何可以在SVG文件上实现的东西吗?
除了我找到的文档之外,是否有使用它的示例/教程/视频?
答案 0 :(得分:38)
通过Android Support Library 23.2.1更新,支持向量抽屉和动画矢量抽屉。(您也可以使用latestone)
请在gradle文件中更新库的版本。
compile 'com.android.support:recyclerview-v7:23.2.1'
Vector drawables允许您使用XML定义的单个矢量图形替换多个png资源。 虽然之前仅限于Lollipop和更高版本的设备,但VectorDrawable
和AnimatedVectorDrawable
现在都可以通过两个新的支持库 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.3.0
有关详细信息,请查看here。
代理drawable不起作用。但是,app:srcCompat
和setImageResource()
可以正常工作。
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)。
答案 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”