【发布时间】:2019-10-22 14:44:40
【问题描述】:
我的 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 拒绝将 Bitmap 绘制到存储在堆中的画布上。
异常的负责 Android 源代码在这里: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/graphics/java/android/graphics/BaseCanvas.java#532
显然,我可以再次加载位图以进行拖放。但是,这对设备来说是额外的工作,而且需要将大量解耦的代码捆绑在一起。
有没有办法解决这个问题?有没有办法将位图从硬件中取出并放入堆中?
【问题讨论】: