在我的应用程序中,我正在尝试更改每个listView项目的背景颜色。为此,我使用的是图层列表中的形状。 这是我的代码
drop_shadow.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<gradient android:startColor="#B7B7B7"
android:endColor="#A1A1A1"
android:angle="270"/>
<corners android:radius="10dp" />
</shape>
</item>
<item android:top="1px">
<shape android:shape="rectangle">
<solid android:color="@color/color11"/>
<corners android:radius="10dp" />
</shape>
</item>
</layer-list>
main.xml中
<RelativeLayout
android:orientation="vertical"
android:id="@+id/mainLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/drop_shadow"/>
当我调用此方法时,我有ClassCastException
private void setRoundedBackground(View view,int color){
GradientDrawable gradientDrawable;
gradientDrawable = (GradientDrawable) view.getBackground().mutate();
gradientDrawable.setColor(getResources().getColor(color));
gradientDrawable.invalidateSelf();
}
如何从LayerDrawable获取GradientDrawable?
答案 0 :(得分:5)
你可以动态创建渐变可绘制的..使用下面的类
import android.graphics.drawable.GradientDrawable;
public class SomeDrawable extends GradientDrawable {
public SomeDrawable(int pStartColor, int pCenterColor, int pEndColor, int pStrokeWidth, int pStrokeColor, float cornerRadius) {
super(Orientation.BOTTOM_TOP,new int[]{pStartColor,pCenterColor,pEndColor});
setStroke(pStrokeWidth,pStrokeColor);
setShape(GradientDrawable.RECTANGLE);
setCornerRadius(cornerRadius);
}
}
并使用此课程如下
SomeDrawable drawable = new SomeDrawable(Color.parseColor("Start Color Code"),Color.parseColor("Center Color Code"),Color.parseColor("End Color Code"),1,Color.BLACK,00);
yourLayout.setBackgroundDrawable(drawable);
答案 1 :(得分:1)
它们都是Drawable的子类,因此您不能将它们相互转换,只能转移到它们的父类。
答案 2 :(得分:0)
我认为最好使用separacte colors.xml文件作为形状的颜色,并使用标签,你可以删除。
毕竟你的形状都是矩形的。
以前我得到了同样的错误,因为我在同一个xml中使用和。