Je suis en train de faire une fonction cadre général qui fait tout Drawable est mis en surbrillance lorsque pressé / concentré / sélectionné / etc .
Ma fonction prend un Drawable et retourne un StateListDrawable, où l'état par défaut est le Drawable lui-même, et l'état pour android.R.attr.state_pressed
est le même drawable, juste avec un filtre appliqué à l'aide de setColorFilter
.
Mon problème est que je ne peux pas cloner le dessinable et en créer une instance séparée avec le filtre appliqué. Voici ce que j'essaye de réaliser:
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;
}
Si je ne clone pas, le filtre est évidemment appliqué aux deux états. J'ai essayé de jouer avec mutate()
mais ça n'aide pas.
Des idées?
Mettre à jour:
La réponse acceptée clone en effet un dessinable. Cela ne m'a pas aidé car ma fonction générale échoue sur un problème différent. Il semble que lorsque vous ajoutez un dessinable à une StateList, il perd tous ses filtres.