2015-03-27 4 views
0

Я Drawable файла XML, который стоит на моем пользовательском прогресс бар:Изменения формы сплошного цвета во время выполнения

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/background"> 
    <shape 
     android:innerRadiusRatio="3" 
     android:shape="ring" 
     android:useLevel="false" 
     android:thicknessRatio="6.4"> 
     <solid android:color="@android:color/transparent" /> 
     <stroke 
      android:width="2dp" 
      android:color="@android:color/darker_gray" /> 
    </shape> 
</item> 
<item android:id="@+id/progress"> 
    <rotate 
     android:fromDegrees="270" 
     android:toDegrees="270"> 
     <shape 
      android:innerRadiusRatio="3" 
      android:shape="ring" 
      android:thicknessRatio="7.0"> 
      <solid 
       android:id="@+id/progressColor" 
       android:color="#FBB817" /> 
     </shape> 
    </rotate> 
    </item> 
</layer-list> 

Используется здесь:

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="150dip" 
    android:id="@+id/relativeLayout"> 

    <ProgressBar 
     android:id="@+id/progressBar" 
     style="@android:style/Widget.ProgressBar.Horizontal" 
     android:layout_width="150dip" 
     android:layout_height="150dip" 
     android:layout_centerHorizontal="true" 
     android:indeterminate="false" 
     android:progressDrawable="@drawable/progressbar" /> 

    <TextView 
     android:id="@+id/tvProgress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_centerHorizontal="true" 
     android:layout_centerVertical="true" 
     android:text="progress" /> 

</RelativeLayout> 

мне нужно изменить сплошной цвет с идентификатором progressColor в время выполнения основано на некоторых условиях. Пробовал все здесь, и для меня ничего не работает. Какие-либо предложения?

Я попытался изменить его так:

LayerDrawable layerDrawable = (LayerDrawable) getResources().getDrawable(R.drawable.progressbar); 
layerDrawable.setDrawableByLayerId(R.id.progressColor, new ColorDrawable(Color.BLUE)); 
progressBar.setProgressDrawable(layerDrawable); 

Но это ничего не меняет.

Я нашел решение здесь:

View v = findViewById(R.id.relativeLayout); 
LayerDrawable layerDrawable = (LayerDrawable) v.getBackground(); 
final GradientDrawable shape = (GradientDrawable) layerDrawable.findDrawableByLayerId(R.id.progressColor); 
shape.setColor(Color.BLACK); 

Но это просто врезаться мое приложение.

+0

Пожалуйста, объясните, что у вас до сих пор. – alanv

ответ

0

Я нашел решение, но это не идеально, но это трюк.

Сначала сделайте еще один вариант с другим цветом прогресса.

progressbar1.xml:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:id="@+id/background"> 
    <shape 
     android:innerRadiusRatio="3" 
     android:shape="ring" 
     android:thicknessRatio="6.4" 
     android:useLevel="false"> 
     <solid android:color="@android:color/transparent" /> 
     <stroke 
      android:width="2dp" 
      android:color="@android:color/darker_gray" /> 
    </shape> 
</item> 
<item android:id="@+id/progress"> 
    <rotate 
     android:fromDegrees="270" 
     android:toDegrees="270"> 
     <shape 
      android:id="@+id/shape" 
      android:innerRadiusRatio="3" 
      android:shape="ring" 
      android:thicknessRatio="7.0"> 
      <solid 
       android:id="@+id/progressColor" 
       android:color="#111" /> 
     </shape> 
    </rotate> 
</item> 

Затем, когда вам это нужно, прежде чем сделать свой прогресс бар просто изменить вытяжке с помощью следующего кода:

Drawable drawable = getResources().getDrawable(R.drawable.progressbar1); 
progressBar.setProgressDrawable(drawable); 
Смежные вопросы