有时候需要改变shape中部分属性,比如下面代码,只想改变颜色,圆角不变
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<corners android:bottomLeftRadius="4dp" android:bottomRightRadius="4dp" />
<solid android:color="@color/color_051b28_alpha_60" />
</shape>
不实用的方式是创建多个xml文件,里面填充solid的颜色不同,但是如果种类较多,创建起来比较麻烦。下面举例2种方法数
方法一:
获取view的background,改变其颜色。
GradientDrawable gd = (GradientDrawable)view.getBackground();
gd.setColor("#679432");
view.setBackground(gd);
方法二:
通过代码创建shape,可指定颜色、4个位置圆角。设置到view的background中
view.setBackground(setShapeColor(color, radii))
/**
* 设置圆角背景
*
* @param
* @param radii new float[] { r0, r0, r1, r1, r2, r2, r3,r3 }
* 设置图片四个角圆形半径:1、2两个参数表示左上角,3、4表示右上角,5、6表示右下角,7、8表示左下角
* @return
*/
public static GradientDrawable setShapeColor(int color, float[] radii) {
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setGradientType(GradientDrawable.RECTANGLE);
drawable.setCornerRadii(radii);
drawable.setColor(color);
return drawable;
}
注意:
view.getBackground获取的类型是GradientDrawable,不要强制转为其他的类型,不然会报错。
java.lang.ClassCastException: android.graphics.drawable.GradientDrawable cannot be cast to android.graphics.drawable.ShapeDrawable