您好我有一个xml形状可绘制,它用作视图的背景。它的颜色需要根据条件在代码中进行更改。
所以我在做
ShapeDrawable d = (ShapeDrawable) getResources().getDrawable(R.drawable.shape1);
d.getPaint().setShader(sd1);
但是getDrawable返回一个渐变drawable,将它转换为ShapeDrawable会产生错误。
那么如何在代码中获取shapeDrawable并修改其属性。
答案 0 :(得分:1)
我能够通过强制转换为GradientDrawable而不是ShapeDrawable来解决这个问题。
GradientDrawable shape = (GradientDrawable) getResources().getDrawable(R.drawable.shape1);
shape.setColor(Color);
当我使用基于Holo.Dialog主题的自定义样式创建活动时,我使用了这个。
答案 1 :(得分:1)
此代码段对我有用:
PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(getResources().getColor(R.color.your_color),PorterDuff.Mode.MULTIPLY);
imgView.getDrawable().setColorFilter(porterDuffColorFilter);
imgView.setBackgroundColor(Color.TRANSPARENT)
答案 2 :(得分:0)
以下是设置颜色的方法:
d.getPaint().setColor(Color.BLACK);
答案 3 :(得分:0)
我写了一个通用函数,你可以在其中传递上下文,图标是id drawable / mipmap图标图标和该图标所需的新颜色。
此函数返回一个drawable。
public static Drawable changeDrawableColor(Context context,int icon, int newColor) {
Drawable mDrawable = ContextCompat.getDrawable(context, icon).mutate();
mDrawable.setColorFilter(new PorterDuffColorFilter(newColor, PorterDuff.Mode.SRC_IN));
return mDrawable;
}
changeDrawableColor(getContext(),R.mipmap.ic_action_tune, Color.WHITE);