2011-10-21 107 views
2

搜索完網站後,我找到了下面的代碼來更改進度條的顏色。這在第一次調用代碼時正常工作(進度條變爲綠色),但每次調用代碼後,我都會看到一個空白的進度條。有沒有人遇到過這個問題?如果是這樣,每次調用「setProgressDrawable」時能夠更改進度條顏色的解決方案是什麼?更改進度條顏色會導致進度條無法顯示

<?xml version="1.0" encoding="utf-8"?> 
    <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="#ff9d9e9d" 
      android:centerColor="#ff5a5d5a" 
      android:centerY="0.75" 
      android:endColor="#ff747674" 
      android:angle="270" 
    /> 
</shape> 
</item> 

<item android:id="@android:id/secondaryProgress"> 
<clip> 
    <shape> 
     <corners android:radius="5dip" /> 
     <gradient 
       android:startColor="#80ffd300" 
       android:centerColor="#80ffb600" 
       android:centerY="0.75" 
       android:endColor="#a0ffcb00" 
       android:angle="270" 
     /> 
    </shape> 
</clip> 
</item> 
<item 
android:id="@android:id/progress"> 
<clip> 
    <shape> 
     <corners 
      android:radius="5dip" /> 
     <gradient 
       android:startColor="@color/greenStart" 
       android:centerColor="@color/greenMid" 
       android:centerY="0.75" 
       android:endColor="@color/greenEnd" 
       android:angle="270" 
     /> 
    </shape> 
</clip> 
</item> 

</layer-list> 

定義顏色的strings.xml文件

<color name="greenStart">#ff33dd44</color> 
<color name="greenMid">#ff0A8815</color> 
<color name="greenEnd">#ff1da130</color> 

代碼變色

Rect bounds = bar.getProgressDrawable().getBounds(); 
bar.setProgressDrawable(getResources().getDrawable(R.drawable.green_progress)); 
bar.getProgressDrawable().setBounds(bounds); 

回答

2

我終於找到了解決我的問題。如果我更改的顏色與已設置的顏色相同,則進度條將變爲空白。因此,在我的代碼第一次進度條會從默認黃色變爲綠色時。但是,下次代碼被稱爲進度條(已被設置爲綠色)被設置爲綠色,結果整個進度條將變爲空白。

爲了解決這個問題,我記錄了進度條的當前顯示顏色,當我重新設置顏色時,我只在與當前顯示的顏色不同時設置顏色。

希望這有助於其他人發現自己處於相同的情況。