Androidアプリでは、ユーザーがアクティビティ内の画像をドラッグアンドドロップできます。それは、Android Oとハードウェアイメージアクセラレーションが到着するまでうまく動作していました。コードは次の例外がスローされます。Android O:DragShadowBuilderがIllegalStateExceptionをスローする:ソフトウェアレンダリングでハードウェアビットマップがサポートされない
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のソースコードはここにある:明らかに https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/graphics/java/android/graphics/BaseCanvas.java#532
、私はドラッグ&ドロップのためにビットマップをもう一度読み込むことができます。しかし、それはデバイスのための余分な仕事であり、うまく分離されていないコードを一緒に結びつける必要があります。
これを修正する方法はありますか?ビットマップをハードウェアから取り出してヒープにする方法はありますか?