2017-12-12 9 views
0

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

、私はドラッグ&ドロップのためにビットマップをもう一度読み込むことができます。しかし、それはデバイスのための余分な仕事であり、うまく分離されていないコードを一緒に結びつける必要があります。

これを修正する方法はありますか?ビットマップをハードウェアから取り出してヒープにする方法はありますか?

答えて

0

グライドウェブサイト上でこのグライドの問題は、何が起こっているかを説明します。 https://github.com/bumptech/glide/issues/2309

ソリューションはグライドでハードウェアアクセラレーションを無効にするには、次のとおりです。 http://bumptech.github.io/glide/javadocs/431/com/bumptech/glide/request/RequestOptions.html#disallowHardwareConfig--

はBitmap.Config.HARDWAREの使用を無効にしますダウンサンプラーのエラーを避けるために[...] Canvasにビットマップを使って描画する

以下のコードは特定のイメージのハードウェアアクセラレーションを無効にします。

  GlideApp.with(context) 
       .applyDefaultRequestOptions(new RequestOptions().disallowHardwareConfig()) 
       .load(imageUrl) 
       .into(imageView); 
関連する問題