我正在尝试从资产中加载矢量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
答案 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的工作代码。有人有想法吗?