Sto cercando di creare una funzione framework generale che renda qualsiasi Drawable evidenziato quando viene premuto / focalizzato / selezionato / ecc .
La mia funzione accetta un Drawable e restituisce un StateListDrawable, dove lo stato predefinito è il Drawable stesso e lo stato per android.R.attr.state_pressed
è lo stesso drawable, solo con un filtro applicato usando setColorFilter
.
Il mio problema è che non posso clonare il drawable e crearne 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 clono, il filtro viene ovviamente applicato a entrambi gli stati. Ho provato a giocarci mutate()
ma non aiuta ..
Qualche idea?
Aggiornare:
La risposta accettata infatti clona un disegnabile. Non mi ha aiutato però perché la mia funzione generale fallisce su un problema diverso. Sembra che quando aggiungi un disegnabile a una StateList, perda tutti i suoi filtri.