Sto cercando di creare una funzione framework generale che renda ogni Drawable evidenziato quando premuto/focused/selezionato/etc.Android: clonazione di un drawable per creare un oggetto StateListDrawable con i filtri
La mia funzione accetta un Drawable e restituisce StateListDrawable, dove lo stato predefinito è Drawable stesso e lo stato per android.R.attr.state_pressed
è lo stesso drawable, solo con un filtro applicato utilizzando setColorFilter
.
Il mio problema è che non posso clonare il drawable e creare un'istanza separata con il filtro applicato. Ecco cosa sto cercando di ottenere:
StateListDrawable makeHighlightable(Drawable drawable)
{
StateListDrawable res = new StateListDrawable();
Drawable clone = drawable.clone(); // how do I do this??
clone.setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
res.addState(new int[] {android.R.attr.state_pressed}, clone);
res.addState(new int[] { }, drawable);
return res;
}
Se non clone, il filtro viene ovviamente applicato a entrambi gli stati. Ho provato a giocare con mutate()
ma non aiuta ..
Qualche idea?
Aggiornamento:
La risposta accettata cloni davvero un disegnabile. Non mi ha aiutato però perché la mia funzione generale non riesce su un problema diverso. Sembra che quando si aggiunge un drawable a StateList, questo perde tutti i suoi filtri.
Ciao, hai trovato una soluzione per i drawable che perdevano i filtri? Ho incontrato lo stesso problema :(Ho finito per generare altra immagine dall'immagine sorgente clonando Bitmap e applicando il filtro pixel per pixel. Sì, questo è inefficiente, ma ho solo un po 'di piccole immagini elaborate una volta .. – port443
I non è stato possibile risolverlo con StateListDrawable, ma se non stai usando StateListDrawable e stai ancora perdendo i tuoi filtri, assicurati che le tue bitmap siano mutevoli. Ci sono buone domande correlate: http://stackoverflow.com/questions/5499637/drawable-setcolorfilter -not-working-on-android-2-1, inoltre ho scoperto che LightingColorFilter funziona in posti dove PorterDuff fallisce .. lovin questo android :) – talkol
un'ottima risposta su questo link http://stackoverflow.com/questions/ 10889415/aggiunta-un-colore-filtro-a-un-disegnabile-cambia-tutti-pulsanti-usando-lo stesso-disegnabile – Alan