Estoy tratando de hacer una función marco general que hace que cualquier Disponibles se resaltarán cuando se pulsa / centrado / seleccionado / etc .
Mi función toma Drawable y devuelve StateListDrawable, donde el estado predeterminado es Drawable en sí mismo, y el estado para android.R.attr.state_pressed
es el mismo dibujable, solo que con un filtro aplicado usando setColorFilter
.
Mi problema es que no puedo clonar el dibujable y hacer una instancia separada con el filtro aplicado. Esto es lo que estoy tratando de lograr:
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 no clono, obviamente el filtro se aplica a ambos estados. Intenté jugar con mutate()
pero no ayuda.
¿Algunas ideas?
Actualizar:
De hecho, la respuesta aceptada clona un dibujable. Sin embargo, no me ayudó porque mi función general falla en un problema diferente. Parece que cuando agrega un elemento de diseño a StateList, pierde todos sus filtros.