2012-11-19 19 views
5

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)

risposta

3

Ok. Ho trovato this post

Si scopre che StateListDrawables perde il filtro per qualche motivo ... ho preso la soluzione di SNOK e funziona benissimo per me.

Non so perché Google non ritiene che dovrebbe essere indicato sui documenti come effetto collaterale ...

Problemi correlati