Android shape 资源工具类GradientDrawable的使用说明,小坑一个

Android开发中遇到需要设置一个shape文件A做为背景颜色,在项目中需要动态的更改背景颜色,于是乎想到了使用GradientDrawable这个类来改变控件的背景颜色,使用起来很简单,前提是view的background属性为shape A

GradientDrawable gd = view.getBackground();

gd.setColor();

这样就可以实现动态改变shape的填充色

坑来了 


因为A资源不止在一个地方使用,所以在B页面将A资源的填充色改变之后,访问其他页面的时候,发现使用A资源为背景颜色的控件,背景颜色都变成了在B界面更改的颜色,所以这个GradientDrawable类在使用中,尽量避免将更改了填充色shape资源,在项目中的重复引用!

原因

GradientDrawable.setColor源码有说明

用一个单一的颜色代替一个梯度变化,来更改drawable资源

更改的颜色会影响drawable从资源加载的所有实例,建议在更改颜色之前调用

/**
 * Changes this drawable to use a single color instead of a gradient.
 * 

* Note: changing color will affect all instances of a * drawable loaded from a resource. It is recommended to invoke * {@link #mutate()} before changing the color. * * @param argb The color used to fill the shape * * @see #mutate() * @see #setColors(int[]) * @see #getColor */ public void setColor(@ColorInt int argb) { mGradientState.setSolidColors(ColorStateList.valueOf(argb)); mFillPaint.setColor(argb); invalidateSelf(); }


你可能感兴趣的:(android)