Примітка : Відповідь було оновлено, щоб охопити сценарій, де background
є примірник ColorDrawable
. Дякую Тайлеру Пфаффу , що вказав на це.
Малюнок є овальним і є фоном ImageView
Отримати Drawable
від imageView
використання getBackground()
:
Drawable background = imageView.getBackground();
Перевірте звичайних підозрюваних:
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));
}
Компактна версія:
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));
}
Зауважте, що перевірка нуля не потрібна.
Однак вам слід скористатись mutate()
чернетки, перш ніж змінювати їх, якщо вони використовуються в іншому місці. (За замовчуванням малюнки, завантажені з XML, мають однаковий стан.)