2011-12-06 9 views
0

私は、リソースからDrawableで表される私のImageViewの内容にいくつかの追加をしようとしています。私はすべてのDrawableがデフォルトで不変であることを知っていますが、mutable()メソッドを呼び出してからBitmapを取得した後でも、それをCanvasオブジェクトに渡すと私はjava.lang.IllegalStateException: Immutable bitmap passed to Canvas constructorになります。コードは次のとおりです。リソースからビットマップを変更する

Drawable homeImage = mHomeImage.getBackground(); // my ImageView 
homeImage.mutate(); 
Canvas c = new Canvas(((BitmapDrawable)homeImage).getBitmap()); 

このBitmapのコピーを作成せずに変更する方法はありますか?

答えて

1

あなたはキャンバスのための新しいビットマップを作成する必要があります。この

Bitmap bmp1 = (((BitmapDrawable)homeImage).getBitmap()) 
     .copy(Config.ARGB_8888, true); 
Canvas c = new Canvas(bmp1); 

を試してみてください。キャンバスは描画されたものを格納するために渡されたビットマップを使用するので、ビットマップは変更可能でなければなりません。

+0

ありがとうございます。ご覧のとおり、このビットマップ**をコピーしないで修正する方法はありますか**。 – teoREtik

+0

私は早くurの質問を見た。私はちょうどあなたの質問のコードは動作しません上記のコードを入れた。そして私はあなたがそれのコピーを作成せずにビットマップを変更できるとは思わない。イメージビューの上に何かを描こうとしている場合。新しいビットマップを作成し、新しいものを新しいビットマップに描画し、次にframelayoutを使用して、ビューを互いの上に積み重ねます。単一のビューとして表示されます。 – blessenm

+0

いいえ、私の目標は、3秒ごとにネットワーク速度を聞いて、画像の上に無線LAN信号の状態を描くことです。ビットマップをコピーする場合はメモリ消費が心配ですが、心配する必要はありません。 – teoREtik

関連する問題