2013-08-05 60 views
2

在我的應用程序中,我正在嘗試爲每個listView項目更改背景顏色。爲此,我使用層疊列表中的形狀。 這裏是我的代碼java.lang.ClassCastException:android.graphics.drawable.LayerDrawable無法轉換爲android.graphics.drawable.GradientDrawable

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 ?

回答

4

您可以動態創建漸變繪製..使用下面類

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); 
0

它們都是Drawable的子類,所以你不能將它們轉換爲彼此,只能轉換爲它們的父類。

+0

我應該改變這裏的最佳解決方案 – fish40

+0

這取決於你想什麼使用GradientDrawable – pshegger

+0

我想要以編程方式更改純色(本例中爲color11) – fish40

相關問題