我正在尝试从资产中加载矢量可提取项。
当我使用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

最佳答案

在查看了android源代码之后,我找到了一个解决方案。
createfromstream方法似乎不支持向量drawables。因为它使用位图工厂。
但我们可以将它们作为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的工作代码。有人知道吗?

07-24 09:45
查看更多