2017-04-12 118 views
1

我想更改我的進度欄的漸變顏色。現在,我可以將其更改爲純色,但我無法將其更改爲漸變色。Android更改形狀可繪製顏色

LayerDrawable progressDrawable = (LayerDrawable) myProgressBar.getProgressDrawable(); 

// get the color drawable of the progress bar 
Drawable primaryColor = progressDrawable.getDrawable(1); 

// set the new color. 
primaryColor.setColorFilter(ContextCompat.getColor(getContext(), R.color.yellow), PorterDuff.Mode.SRC_OVER); 

取而代之的是純色我想改變漸變色。

編輯我可繪製文件

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:id="@android:id/background"> 
    <shape> 
     <corners android:radius="5dip" /> 
     <gradient 
      android:startColor="@color/gray300" 
      android:centerColor="@color/gray400" 
      android:centerY="0.75" 
      android:endColor="@color/gray500" 
      android:angle="270" 
      /> 
    </shape> 
</item> 

<item 
    android:id="@+id/progress"> 
    <clip> 
     <shape> 
      <corners 
       android:radius="5dip" /> 
      **I want to change this gradient color** 
      <gradient 
      android:startColor="#33FF33" 
      android:endColor="#008000" 
      android:angle="270" /> 
     </shape> 
    </clip> 
</item> 

</layer-list> 

回答

1

試試這個

GradientDrawable bgShape = (GradientDrawable) myProgressBar.getBackground().getCurrent(); 
bgShape.setColor(Color.YELLOW); 
+1

我得到的錯誤'android.graphics.drawable.LayerDrawable不能轉換爲android.graphics.drawable.GradientDrawable'。我已經包含可繪製文件。 –

+0

編輯我的答案 – ZeroOne

0

這裏是我的實現:繪製動畫彩虹漸變。很酷,如果我真的這麼說。它不是基於XML的,但可以做成,它確實使用漸變。也許它會給你一些想法。

設置:

pb = (ProgressBar) findViewById(R.id.progressbar_Horizontal); 
GradientDrawable rainbow = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] {Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED}); 

AnimationDrawable ad = getProgressBarAnimation(); 
pb.setBackgroundDrawable(ad); 

和動畫:

private AnimationDrawable getProgressBarAnimation(){ 

GradientDrawable rainbow1 = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] {Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW}); 

GradientDrawable rainbow2 = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] { Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN});   

GradientDrawable rainbow3 = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] { Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE, Color.CYAN }); 

GradientDrawable rainbow4 = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] { Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA, Color.BLUE }); 

GradientDrawable rainbow5 = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] { Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED, Color.MAGENTA }); 

GradientDrawable rainbow6 = new GradientDrawable(Orientation.LEFT_RIGHT, 
     new int[] {Color.MAGENTA, Color.BLUE, Color.CYAN, Color.GREEN, Color.YELLOW, Color.RED }); 


GradientDrawable[] gds = new GradientDrawable[] {rainbow1, rainbow2, rainbow3, rainbow4, rainbow5, rainbow6}; 

AnimationDrawable animation = new AnimationDrawable(); 

for (GradientDrawable gd : gds){ 
    animation.addFrame(gd, 100); 

} 

animation.setOneShot(false); 

return animation; 

}