Android O:DragShadowBuilder抛出非法状态异常:软件渲染不';不支持硬件位图

Android O:DragShadowBuilder抛出非法状态异常:软件渲染不';不支持硬件位图,android,bitmap,Android,Bitmap,我的Android应用程序允许用户在活动中拖放图像。在Android O和硬件图像加速到来之前,它一直工作良好。代码现在引发以下异常: IllegalStateException:软件呈现不支持硬件 位图 这是我的密码: public class PhotoDragShadowBuilder extends DragShadowBuilder { @Override public void onDrawShadow(Canvas canvas) { Drawabl

我的Android应用程序允许用户在活动中拖放图像。在Android O和硬件图像加速到来之前,它一直工作良好。代码现在引发以下异常:

IllegalStateException:软件呈现不支持硬件 位图

这是我的密码:

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:软件渲染不支持硬件位图”

我通过创建一个新活动并复制代码块,同时检查我的应用程序在添加代码后是否运行,从而解决了这个错误

最后,我的应用程序运行时没有任何错误,我不知道为什么会抛出此错误