2017-04-12 2 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; 

}