Eu estou tentando fazer uma função quadro geral que faz qualquer Drawable tornar-se realçado quando pressionado / focalizado / selecionada / etc .
Minha função pega um Drawable e retorna um StateListDrawable, onde o estado padrão é o próprio Drawable, e o estado para android.R.attr.state_pressed
é o mesmo drawable, apenas com um filtro aplicado usando setColorFilter
.
Meu problema é que não consigo clonar o drawable e fazer uma instância separada dele com o filtro aplicado. Aqui está o que estou tentando alcançar:
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 eu não clonar, o filtro será obviamente aplicado a ambos os estados. Tentei brincar mutate()
mas não adiantou ..
Alguma ideia?
Atualizar:
A resposta aceita de fato clona um drawable. Mas isso não me ajudou porque minha função geral falha em um problema diferente. Parece que quando você adiciona um drawable a um StateList, ele perde todos os seus filtros.
ImageView.setImageDrawable
, que consegui contornar graças à resposta aceita.