如何以编程方式修改drawable的颜色

时间:2013-08-13 15:16:54

标签: android android-drawable

您好我有一个xml形状可绘制,它用作视图的背景。它的颜色需要根据条件在代码中进行更改。

所以我在做

  ShapeDrawable d =  (ShapeDrawable) getResources().getDrawable(R.drawable.shape1);

  d.getPaint().setShader(sd1);

但是getDrawable返回一个渐变drawable,将它转换为ShapeDrawable会产生错误。

那么如何在代码中获取shapeDrawable并修改其属性。

4 个答案:

答案 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);