หมายเหตุ : คำตอบที่ได้รับการปรับปรุงเพื่อให้ครอบคลุมสถานการณ์ที่เป็นตัวอย่างของbackground
ColorDrawable
ขอบคุณTyler Pfaffสำหรับการชี้ให้เห็น
drawable เป็นรูปวงรีและเป็นพื้นหลังของ 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));
}
โปรดทราบว่าไม่จำเป็นต้องมีการตรวจสอบ null
อย่างไรก็ตามคุณควรใช้mutate()
กับ drawable ก่อนที่จะแก้ไขหากใช้ในที่อื่น (โดยค่าเริ่มต้น drawable ที่โหลดจาก XML จะใช้สถานะเดียวกัน)