2012-04-11 7 views
1

私は、後に(ない、まさにこのようにするが、そのテストのためにストリップダウン)このような関数で複数のオブジェクトに割り当てることBitmapDrawableを作成します。複数のオブジェクトに同じBitmapDrawableを割り当てることはできますか?

Drawable CreateBitmap(int col) 
{ Bitmap b = Bitmap.createBitmap(50, 50, Config.ARGB_8888); 
    Canvas c = new Canvas(b); 
    c.drawColor(col); 
    return new BitmapDrawable(b); 
} 

そして、このサイズでBitmapDrawableを動作し、私を作成します私が記憶している50×50。次に、このBitmapDrawableをさまざまなボタンやチェックボックスなどに割り当てます。何が表示されていても、特定の色が必要です。

私が持っている問題は、BitmapDrawablesが何とか切り詰められていることです。私はそれを高さ80のボタンに割り当て、次に高さ160のボタンに割り当てると、最初はきれいに塗りつぶされ、後者は半分しか塗り潰されないように見えます。 BitmapDrawableは最初の使用に設定され、後続のすべての割り当てはそれによって制限されているようです。ときどき直ちに起きることがあります。別のタブに切り替えて前のタブに戻るときにのみ起こることがあります。

私はBitmapDrawableが50x50のままで、そのオブジェクトに割り当てられたオブジェクトが、適切なサイズの独自のバージョンを取得しているか、レンダリング時にサイズ変更されたコピーを作成していて、BitmapDrawable自体を何とか変更していないと考えました。私は、このすべてがどのように深く働いているのか分かりませんし、私が間違っていることについて助言をいただきたいと思います。もし私が割り当てた各オブジェクトに対して個別のBitmapDrawableを作成しなければならない場合や、

答えて

1

BitmapDrawableは、オブジェクトのインスタンスにかなり特異的であるようsetStateなどの方法を含む、Drawableオブジェクトです。 BitmapDrawableを簡単に共有できるとは思いません。 (あなたはリストビューは、リストメンバーのビューをキャッシュして、成功した多くを再利用することができるかもしれません。しかし、それはそれのあまりを求めているように、同時に2つの以上の場所に住んでBitmapDrawableを尋ねることはそうです。)

+0

ありがとう:

ここでそれについての素晴らしい記事があります。その後、オブジェクトに対して個別のビットマップを使用します。しかし、私はListViewのために同じ問題を経験しなかったので、同じものを使用します。それはうまくいくはずです。 – HardCoder

+0

@HardCoder:あなたの質問が何を意味するのか分かりません。しかし、BitmapDrawableが一度に1つのビューにしか表示されない限り、それはうまくいくはずです。ただし、個々のListViewアイテムが含まれます。 2つの異なるListViewアイテムで同じBitmapDrawableを使用する場合は、それらが同時に表示されないようにする必要があります。 –

+0

これまでのところ、私はそれらを異なるリストビューや異なるアイテムで使用しており、それまでは問題はありませんでした。しかし、私はリストのために異なるbtimapdrawablesを作ります。私はいくつかのケースを持っていますが、それらは同時に異なるアイテムでも見えますが、決して問題はありませんでした(tbhという2つのリストでも)。私はそれを安全な側に変えるべきでしょうか? – HardCoder

0

BitmapDrawable.mutate()を見てください。それはdrawables定数のコピーを作成しますが、drawableの間で依然として賢明でないビットマップを共有します。

ImageView imgView1 = findByViewId(R.id.my_image_view_1); 
ImageView imgView2 = findByViewId(R.id.my_image_view_2); 

BitmapDrawable image = new BitmapDrawable("/path/to/my/bitmap"); 

imgView1.setImageDrawable(image); 
imgView2.setImageDrawable(image.mutate()); 

これは、ビットマップをコピーせずに、2つの異なる状態を与えるはずです。アドバイスを http://www.curious-creature.org/2009/05/02/drawable-mutations/

関連する問題