VectorDrawable createFromStream 似乎不起作用

Roc*_*ket 3 android android-vectordrawable

我正在尝试从资产加载矢量可绘制对象。

当我使用 png 文件时它工作正常:

final String name = "image.png";
final InputStream stream = context.getAssets().open(name);
drawable = Drawable.createFromStream(stream, name);
stream.close();
Run Code Online (Sandbox Code Playgroud)

我尝试使用 VectorDrawable.createFromStream() 和 VectorDrawableCompat.createFromStream() 但两者总是返回 null。

当我将矢量 drawable 添加到 drawbles 资源时,它可以毫无问题地加载。

我还尝试使用在将矢量文件添加到可绘制资源时创建的二进制 xml 文件。

我使用 API level 24 和 Support libs 24.2.0 with Android 5.1.1 来测试这个。它应该适用于 Android 4.2 及更高版本。

有谁知道如何解决这一问题?

这个问题可能与这个有关: Load a vector drawable into imageview from sd card

Roc*_*ket 6

查看Android源代码后,我找到了解决方案。createFromStream 方法似乎不支持矢量可绘制对象。因为它使用了一个 BitmapFactory。

但我们可以将它们加载为 xml 资源:

final XmlResourceParser parser = context.getAssets().openXmlResourceParser("assets/folder/image.xml");
drawable = VectorDrawableCompat.createFromXml(context.getResources(), parser);
Run Code Online (Sandbox Code Playgroud)

image.xml 必须是预编译的二进制 xml 文件。当您将矢量 drawable 添加到 drawable 资源时,您可以从生成的 apk 文件中提取它们。

这种方法的问题是,它需要 Android 5。但我需要一个适用于 Android 4.2 的工作代码。任何人的想法?