注:答案已經更新到覆蓋場景background
是ColorDrawable
一個實例。謝謝Tyler Pfaff,指出這一點。
的繪製是一個橢圓形,是一個ImageView的
的背景使用getBackground()
獲取從imageView
的Drawable
:
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();
對通常的嫌疑人入住
壓縮版本:
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共享加載相同的狀態。)
你對此drawable設置了什麼? – Vikram
drawable是一個「橢圓形」,是ImageView的背景。 –
如果問這個問題太困難了,是否有辦法將多個圖像繪製到畫布上,並將分層最終產品設置爲視圖的背景? –