Nota : A resposta foi atualizada para cobrir o cenário em que background
é uma instância ColorDrawable
. Obrigado Tyler Pfaff , por apontar isso.
O drawable é um oval e é o plano de fundo de um ImageView
Obter o Drawable
de imageView
usar getBackground()
:
Drawable background = imageView.getBackground();
Verifique contra suspeitos comuns:
if (background instanceof ShapeDrawable) {
// cast to 'ShapeDrawable'
ShapeDrawable shapeDrawable = (ShapeDrawable) background;
shapeDrawable.getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof GradientDrawable) {
// cast to 'GradientDrawable'
GradientDrawable gradientDrawable = (GradientDrawable) background;
gradientDrawable.setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof ColorDrawable) {
// alpha value may need to be set again after this call
ColorDrawable colorDrawable = (ColorDrawable) background;
colorDrawable.setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
}
Versão compacta:
Drawable background = imageView.getBackground();
if (background instanceof ShapeDrawable) {
((ShapeDrawable)background).getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof GradientDrawable) {
((GradientDrawable)background).setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof ColorDrawable) {
((ColorDrawable)background).setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
}
Observe que a verificação nula não é necessária.
No entanto, você deve usar mutate()
os desenhistas antes de modificá-los, se eles forem usados em outros lugares. (Por padrão, os drawables carregados do XML compartilham o mesmo estado.)