ich sehr seltsames Phänomen, wenn ich versuche, StateListDrawable
zu verwenden:Ungeklärten StateListDrawable Verhalten auf Android
Ich habe eine Ansicht, die ImageView
erstreckt, wo ich StateListDrawable
in seinem Konstruktor verwenden. Ich habe 2 Code-Schnipsel, um mein Problem zu präsentieren. Die erste:
public class MyView extends ImageView{
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);
filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));
setImageDrawable(filteredDrawable);
}
Und die zweite:
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);
}
(ich diesen Code nicht weiß, sehr viel Sinn machen - ich wollte das Problem vereinfachen zu machen die Frage klarer). Das Problem ist, dass beim ersten Schritt alles gut funktioniert - ich habe einen Farbfilter auf das Zeichen gesetzt und es wird angezeigt. Aber auf dem zweiten Ausschnitt, die StateListDrawable
Instanz wirkt sich irgendwie auf den Filter, und die Original Zeichen wird angezeigt, obwohl ich nie mit der ImageView
durch den Aufruf setImageDrawable(states)
verbunden.
Kann mir jemand erklären, was vor sich geht? Mein Ziel ist es, die StateListDrawable
mit dem gleichen ziehbar für verschiedene Zustände wie folgt zu verwenden:
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);
(Ich brauche es durch Code zu tun, weil mein ziehbar soll dynamisch aus dem Netz, und nicht als Ressource geladen werden)