31

複数のボタンが同じ背景の Drawable を使用する画面があります。ボタンがタッチされている間に灰色のカラー フィルターを追加する OnTouch リスナーを追加するために、さまざまなプロジェクトで使用する再利用可能なコードがあります。通常は問題なく動作しますが、この場合、いずれかのボタンを押すとすべてのボタンが着色されます。

http://developer.android.com/guide/topics/graphics/2d-graphics.htmlに説明があります:

注: プロジェクト内の各固有のリソースは、インスタンス化するオブジェクトの数に関係なく、1 つの状態のみを維持できます。たとえば、同じ画像リソースから 2 つの Drawable オブジェクトをインスタンス化してから、一方の Drawable のプロパティ (アルファなど) を変更すると、もう一方にも影響します。

推奨される解決策は、TweenAnimation を使用することですが、これはカラー フィルターでは機能しないようです。

また、Android: Cloning a drawable を見て、drawable.getConstantState ().newDrawable() の使用を提案するフィルターを使用して StateListDrawable を作成しました。これは違いがないようです。同じ物理イメージ ファイルが使用されている限り、同じリソースを使用する他の Drawable への変更によって、すべての Drawable が影響を受けると思います。

押された状態を示す 2 番目の背景画像を作成する以外に、どのような解決策がありますか? コードに追加してすべてのプロジェクトで使用できる、単純なプログラム ソリューションがあればいいのですが。

4

1 に答える 1

72

あなたのために働くはずの例:

Drawable buttonBackground = context.getResources().getDrawable(R.drawable.bg);
buttonBackground = buttonBackground.mutate();

//Set your filter here
于 2012-08-01T15:15:01.940 に答える