VectorDrawable createFromStream似乎不起作用

时间:2016-08-22 06:30:58

标签: android android-vectordrawable

我正在尝试从资产中加载矢量drawable。

使用png文件时效果很好:

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

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

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

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

我使用API​​级别24和支持libs 24.2.0和Android 5.1.1来测试它。它应该适用于Android 4.2及更高版本。

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

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

1 个答案:

答案 0 :(得分:3)

在查看Android源代码后,我找到了一个解决方案。 createFromStream方法似乎不支持向量drawable。因为它使用了BitmapFactory。

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

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

image.xml最好是一个预编译的二进制xml文件。 将向量drawable添加到drawable资源时,可以从生成的apk文件中提取它们。

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