2016-08-25 2 views
1

У меня есть прогресс бар -setProgressDrawble заполняет весь прогресс бар

<ProgressBar 
       android:indeterminateOnly="false" 
       android:progressDrawable="@drawable/progress_anim" 
       android:minHeight="10dip" 
       android:layout_width="170dp" 
       android:layout_height="10dp" 
       android:maxHeight="10dip" 
       android:layout_gravity="center_vertical" 
       android:progress="0" 
       android:max="100" 
       android:id="@+id/scoreProgress"/> 

и я хочу, чтобы установить его прогресс цвет программно. Я делаю это

scoreProgress.setProgress(unikTopics.getScore()); 
scoreProgress.getProgressDrawable().getCurrent() 
.setColorFilter(getResources().getColor(progressColor[counter]) 
android.graphics.PorterDuff.Mode.SRC_IN); 

и это progress_anim.xml -

<?xml version="1.0" encoding="utf-8"?> 

<item android:id="@android:id/background"> 
    <shape> 
     <solid android:color="#808080"/> 
    </shape> 
</item> 

<item android:id="@android:id/secondaryProgress"> 
    <clip> 
     <shape> 
      <solid android:color="@color/white"/> 
     </shape> 
    </clip> 
</item> 

<item android:id="@android:id/progress"> 
    <clip> 
     <shape> 
      <solid android:color="#ff0000"/> 
     </shape> 
    </clip> 
</item> 

Проблема заключается в том, что если я не устанавливать progressdrawble цвет программно, я я получаю прекрасный результат с прогрессом, который отображается красным цветом и частью отдыха в сероватом цвете, но если я его установил p программировать весь индикатор прогресса с этим цветом?

Пожалуйста, помогите, заблаговременно.

+0

У меня есть проблема ProgressBar заполняется progressDrawable только с помощью XML! Я застрял в этой проблеме за 2 часа –

ответ

2

Вы окрашиваете весь выталкиваемый (все слои). Вам нужно захватить слой @android:id/progress из выделенного и цветного изображения.

Попробуйте это:

scoreProgress.setProgress(unikTopics.getScore()); 
LayerDrawable layerDrawable = (LayerDrawable)scoreProgress.getProgressDrawable(); 
layerDrawable.findDrawableByLayerId(android.R.id.progress).setColorFilter(getResources().getColor(progressColor[counter], android.graphics.PorterDuff.Mode.SRC_IN); 
+0

Это работает, спасибо. –