Je suis en train de faire un cadre général de la fonction qui fait tout Drawable mis en valeur lors de la pressée/choisi/etc.
Ma fonction prend un Drawable et renvoie un StateListDrawable, où l'état par défaut est le Drawable lui-même, et l'état d' android.R.attr.state_pressed
est le même drawable, juste avec un filtre appliqué à l'aide d' setColorFilter
.
Mon problème est que je ne peux pas cloner le drawable et de faire une instance séparée de celui-ci avec le filtre appliqué. Voici ce que je suis en train 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 n'ai pas de clone, puis le filtre est évidemment appliqué à deux états. J'ai essayé de jouer avec mutate()
mais il n'aide pas..
Des idées?
Mise à jour:
La accepté de répondre, en effet, les clones d'un drawable. Il ne m'a pas aidé, mais parce que mes générale de la fonction échoue sur un problème différent. Il semble que lorsque vous ajoutez un drawable à un StateList, elle perd tous ses filtres.