android7.0 SnapdragonGallery 遇到的BitmapFactory.decodeResource调用矢量图 空指针问题

在Android 7.0中,使用SnapdragonGallery时遇到BitmapFactory.decodeResource加载SVG矢量图导致空指针异常。通过日志分析,发现参数非空,问题出在矢量图转换上。解决方案是在ResourceTexture子类中,利用VectorDrawable转换SVG,从而避免BitmapFactory的问题。

不积跬步无以至千里
       bug描述:点开图库应用,选择照片,长按照片实现选中效果,直接crash
通过log查看显示调用BitmapFactory.decodeResource 返回的是空指针
调用代码(UploadedTexture.java)如下图:
这里写图片描述
这里是当你选中照片时,之前的bitmap已经被释放,重新获取bitmap,则调用了onGetBitmap方法,这个是抽象方法,然后他的实现方法在这个类的子类中,
ResourceTexture.java 如下图:
这里写图片描述
如图所示,这里是实现方法onGetBitmap,这里通过BitmapFactory.decodeResource方法产生bitmap对象,其中有三个参数,第一个是资源对象,第二个是这个bitmap对应的图片的id,第三个是上边options对bitmap的配置。其实开始我就猜测是这三个参数为空导致的返回为空,结果打印log显示都不为空,后来得知这是因为这里的图片引用的是矢量图vetor,由于版本的原因,bitmapfactory转矢量图会出现问题,因此改善了一下,如下图:

Android开发中,`BitmapFactory.decodeResource` 方法用于从资源文件中解码位图。如果你在一个非Activity的类中使用 `BitmapFactory.decodeResource`,你可能需要传递一个 `Context` 对象来获取资源。以下是如何在 `BitmapFactory.decodeResource` 中获取其它 `Context` 的方法: 1. **在Activity中使用**: 如果你在Activity中使用 `BitmapFactory.decodeResource`,你可以直接使用 `this` 或 `ActivityName.this` 作为 `Context`。 ```java Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.your_image); ``` 2. **在非Activity类中使用**: 如果你在一个非Activity的类中使用 `BitmapFactory.decodeResource`,你需要传递一个 `Context` 对象。通常通过构造函数或方法参数传递。 ```java public class YourClass { private Context context; public YourClass(Context context) { this.context = context; } public Bitmap getBitmap() { return BitmapFactory.decodeResource(context.getResources(), R.drawable.your_image); } } ``` 然后在Activity中创建 `YourClass` 的实例时传递 `this` 作为 `Context`: ```java YourClass yourClass = new YourClass(this); Bitmap bitmap = yourClass.getBitmap(); ``` 3. **使用应用程序上下文**: 如果你只需要访问应用程序级别的资源,而不需要与UI相关的资源,可以使用应用程序上下文。 ```java Context appContext = context.getApplicationContext(); Bitmap bitmap = BitmapFactory.decodeResource(appContext.getResources(), R.drawable.your_image); ``` 通过以上方法,你可以在不同的情况下获取合适的 `Context` 对象,并在 `BitmapFactory.decodeResource` 中使用它。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rom_Fisher

赠人玫瑰,手留余香。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值