Android O:DragShadowBuilder抛出非法状态异常:软件渲染不';不支持硬件位图
我的Android应用程序允许用户在活动中拖放图像。在Android O和硬件图像加速到来之前,它一直工作良好。代码现在引发以下异常: IllegalStateException:软件呈现不支持硬件 位图 这是我的密码:Android O:DragShadowBuilder抛出非法状态异常:软件渲染不';不支持硬件位图,android,bitmap,Android,Bitmap,我的Android应用程序允许用户在活动中拖放图像。在Android O和硬件图像加速到来之前,它一直工作良好。代码现在引发以下异常: IllegalStateException:软件呈现不支持硬件 位图 这是我的密码: public class PhotoDragShadowBuilder extends DragShadowBuilder { @Override public void onDrawShadow(Canvas canvas) { Drawabl
public class PhotoDragShadowBuilder extends DragShadowBuilder {
@Override
public void onDrawShadow(Canvas canvas) {
Drawable photoDrawable = imageView.getDrawable();
photoDrawable.draw(canvas);
}
}
imageView.getDrawable()中的位图设置了标志Bitmap.Config.HARDWARE
。这意味着位图仅存储在硬件中。Android拒绝将位图绘制到存储在堆中的画布上
例外情况的Android源代码如下:
显然,我可以再次加载位图进行拖放。然而,这是device plus的额外工作,需要将大量良好解耦的代码绑定在一起
有办法解决这个问题吗?有没有办法将位图从硬件中取出并放入堆中?Glide网站上的Glide问题解释了发生了什么:
解决方案是在Glide中禁用硬件加速:
禁止在Downsampler中使用Bitmap.Config.HARDWARE,以避免由位图支持的[…]绘制画布所导致的错误
下面的代码显示了如何禁用特定映像的硬件加速
GlideApp.with(context)
.applyDefaultRequestOptions(new RequestOptions().disallowHardwareConfig())
.load(imageUrl)
.into(imageView);
ANDROID O的解决方案导致错误“IllegalStateException:软件渲染不支持硬件位图”
重新编码公共类GlideConfiguration扩展AppGlideModule,如下所示:
RequestOptions options = new RequestOptions();
boolean isAndroidO = (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O);
DecodeFormat format = isAndroidO ? DecodeFormat.PREFER_ARGB_8888 : DecodeFormat.PREFER_RGB_565;
options.format(format);
if (isAndroidO) options.disallowHardwareConfig();
builder.setDiskCache(new InternalCacheDiskCacheFactory(context, diskCacheSizeBytes));
builder.setDefaultRequestOptions(options);
免责声明:-我没有在此活动中使用glide,但我得到了“IllegalStateException:软件渲染不支持硬件位图”
我通过创建一个新活动并复制代码块,同时检查我的应用程序在添加代码后是否运行,从而解决了这个错误
最后,我的应用程序运行时没有任何错误,我不知道为什么会抛出此错误