使用しようとすると、非常に奇妙な現象が発生します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
インスタンスがフィルターになんらかの影響を与え、を呼び出して に接続したことがないにもかかわらず、元のドローアブルが表示されています。ImageView
setImageDrawable(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);
(ドローアブルはリソースとしてではなく、ネットから動的にロードする必要があるため、コードで行う必要があります)