android xml 之vector用法,android – 是否可以从文件系统创建一个VectorDrawable(* .xml文件)...

我想在我的Android应用程序中使用VectorDrawables.

我想从文件系统加载一个xml文件,并获得一个android.graphics.Drawable实例,以在ImageView中显示它.如果我将xml文件添加到Resources目录,它可以工作.但是当我尝试从文件系统加载它时,我总是得到一个NullPointer.

我目前正在尝试通过加载文件

Drawable.createFromPath(* Path to File *)或VectorDrawable.createFromPath(* Path to File *),但我不断获得NullPointer.

文件存在且是一个有效的xml文件(见下文).

在adb日志中我总是得到:

SkImageDecoder::Factory returned null

当我使用mContext.getFilesDir()时,Path看起来像

/data/data/*packagename*/files/*filename*.xml

我还尝试了一些像“下载”这样的公共文件夹.当我使用File.io Api检查文件时,它存在(),canRead()和canWrite()

更新这是从Android Dev Pages获取的XML代码

android:height="64dp"

android:width="64dp"

android:viewportHeight="600"

android:viewportWidth="600" >

android:name="rotationGroup"

android:pivotX="300.0"

android:pivotY="300.0"

android:rotation="45.0" >

android:name="v"

android:fillColor="#000000"

android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />

解决方法:

很不幸的是,不行.除非您以编译资源的方式以某种方式编译XML源文件. VectorDrawable当前假定已编译的图像源.

否则你可能会写这样的东西:

VectorDrawable d = new VectorDrawable();

try( InputStream in = new FileInputStream( *Path to File* ); )

{

XmlPullParser p = Xml.newPullParser();

p.setInput( in, /*encoding, self detect*/null );

d.inflate( getResources(), p, Xml.asAttributeSet(p) ); // FAILS

}

目前失败(API级别23,Marshmallow 6.0),因为inflate调用尝试将属性集强制转换为XmlBlock.Parser,这会抛出ClassCastException.原因记录在source;它将“仅适用于已编译的XML文件”,例如aapt工具打包的资源.

标签:android,xml,vectordrawable

来源: https://codeday.me/bug/20190516/1116908.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值