5

使用しようとすると、非常に奇妙な現象が発生しますStateListDrawable

コンストラクターでImageView使用するを拡張するビューがあります。StateListDrawable問題を提示するために、2 つのコード スニペットがあります。最初の1つ:

public class MyView extends ImageView{  
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);                    
filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));                                     
setImageDrawable(filteredDrawable); 
}

そして2番目のもの:

public class MyView extends ImageView{
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);

filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},  filteredDrawable);
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable);
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale));

//Notice I do not use 'states' at all...
setImageDrawable(filteredDrawable); 

}

(このコードがあまり意味をなさないことはわかっています。問題を単純化して、質問をより明確にしたかったのです)。問題は、最初のシンペットですべてが正常に機能することです。ドローアブルにカラーフィルターを設定すると、表示されます。しかし、2 番目のスニペットでは、StateListDrawableインスタンスがフィルターになんらかの影響を与え、を呼び出して に接続したことがないにもかかわらず、元のドローアブルが表示されています。ImageViewsetImageDrawable(states)

誰かが私に何が起こっているのか説明できますか? 私の目標はStateListDrawable、次のように、さまざまな状態に対して同じドローアブルを使用することです。

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},  filteredDrawable);
states.addState(new int[] {android.R.attr.state_focused}, filteredDrawable);
states.addState(new int[] {}, r.getDrawable(R.drawable.smallsale));
setImageDrawable(states);

(ドローアブルはリソースとしてではなく、ネットから動的にロードする必要があるため、コードで行う必要があります)

4

1 に答える 1

3

Ok。この投稿を見つけました

なんらかの理由でフィルターが緩んでいることStateListDrawables がわかりました... SnoKのソリューションを使用しましたが、うまく機能します。

副作用としてドキュメントに記載する必要があるとGoogleが感じていない理由がわかりません...

于 2012-11-19T22:21:12.053 に答える