2012-11-19 3 views
5

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)

Antwort

3

Ok. Ich fand this post

Es stellt sich heraus, dass StateListDrawables aus irgendeinem Grund den Filter verliert ... Ich nahm Snok-Lösung und es funktioniert gut für mich.

Ich weiß nicht, warum Google nicht das Gefühl hat, dass es auf der Dokumentation als Nebeneffekt notiert werden sollte ...