如何在Android中轻松更改progressBar的颜色?

时间:2011-03-15 08:25:16

标签: android colors progress-bar

我想动态更新ProgressBar Color,以便与实时更改的应用程序布局相匹配。 想法是根据设置的值更改颜色。 我找到了一些解决方案,但似乎很重要的是让动画每秒更新动画几次。

3 个答案:

答案 0 :(得分:4)

使用ProgressBar的方法:

public void setProgressDrawable (Drawable d)

以不同颜色传递Drawable,例如ColorDrawable具有setColor(int color)方法。

要动态更改png可绘制颜色,请尝试:How to change colors of a Drawable in Android?


编辑:

ProgressBar drawable是LayerDrawable,如下所示:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:drawable/screen_progress_frame" />
    <item>
        <scale scaleWidth="100%" scaleGravity="0x3" drawable="@android:drawable/screen_progress_inner" />
    </item>
</layer-list>

它有您想要着色的ScaleDrawable。

创建您自己的类似于上面的LayerDrawable并提取条形图并更改它的颜色。

答案 1 :(得分:0)

这是您可以在代码中使用的解决方案(基于pawelzieba的解决方案)。

ProgressBar progressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal); 
progressBar.setProgressDrawable(new LayerDrawable(
           new Drawable[] { 
               new ColorDrawable(Color.RED),
               new ScaleDrawable(new ColorDrawable(Color.GREEN), Gravity.LEFT, 1, -1),
           })); 
... 
progressBar.setProgress(20);

答案 2 :(得分:0)

嗯,对于任何想要以编程方式进行操作的人:不要忘记将ids设置为Drawables!

    Drawable bckgrndDr = new ColorDrawable(Color.RED);
    Drawable secProgressDr = new ColorDrawable(Color.GRAY);
    Drawable progressDr = new ScaleDrawable(new ColorDrawable(Color.BLUE), Gravity.LEFT, 1, -1);
    LayerDrawable resultDr = new LayerDrawable(new Drawable[] { bckgrndDr, secProgressDr, progressDr });
    //setting ids is important
    resultDr.setId(0, android.R.id.background);
    resultDr.setId(1, android.R.id.secondaryProgress);
    resultDr.setId(2, android.R.id.progress);

将ids设置为drawable是至关重要的,并负责保留边界和进度条的实际状态。

(它看起来由vmayatskii提出的解决方案有效 - 但只有当你调用setProgress(value)aftrawards时,这个值必须与当前进度值不同)