Ho fenomeno molto strano quando si tenta di utilizzare StateListDrawable
:comportamento Uncleared StateListDrawable su Android
ho una vista che si estende ImageView
, dove io uso StateListDrawable
nel suo costruttore. Ho 2 snippet di codice, per presentare il mio problema. Il primo:
public class MyView extends ImageView{
Resources r = getResources();
Drawable filteredDrawable = r.getDrawable(R.drawable.smallsale);
filteredDrawable.setColorFilter(new LightingColorFilter(Color.RED, 1));
setImageDrawable(filteredDrawable);
}
E il secondo:
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);
}
(so che questo codice non fa un sacco di senso - ho voluto semplificare il problema di fare la domanda più chiara). Il problema è che sul primo sinppet tutto funziona bene - ho impostato un filtro colore sul drawable e viene mostrato. Ma sul secondo frammento, l'istanza StateListDrawable
ha effetto in qualche modo sul filtro e viene mostrato il file originale , anche se non l'ho mai collegato allo ImageView
chiamando setImageDrawable(states)
.
Qualcuno può spiegarmi cosa sta succedendo? Il mio obiettivo è quello di utilizzare la StateListDrawable
con la stessa drawable per diversi stati come segue:
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);
(ho bisogno di farlo per codice perché il mio drawable deve essere caricato in modo dinamico dalla rete, e non come una risorsa)