Lưu ý : Câu trả lời đã được cập nhật để bao gồm các tình huống trong đó background
là một ví dụ ColorDrawable
. Cảm ơn Tyler Pfaff , vì đã chỉ ra điều này.
Drawable là một hình bầu dục và là nền của ImageView
Nhận Drawable
từ imageView
việc sử dụng getBackground()
:
Drawable background = imageView.getBackground();
Kiểm tra đối với các nghi phạm thông thường:
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));
}
Phiên bản nhỏ gọn:
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));
}
Lưu ý rằng kiểm tra null là không cần thiết.
Tuy nhiên, bạn nên sử dụng mutate()
trên các drawable trước khi sửa đổi chúng nếu chúng được sử dụng ở nơi khác. (Theo mặc định, các drawable được tải từ XML có cùng trạng thái.)