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

如何在Android中轻松更改progressBar的颜色?,android,colors,progress-bar,Android,Colors,Progress Bar,我想动态更新ProgressBar颜色,以便与实时更改的应用程序布局相匹配。 其思想是根据设置的值更改颜色。 我找到了一些解决方案,但似乎很难在动画中每秒更新几次。使用ProgressBar的方法: public void setProgressDrawable (Drawable d) 并通过不同颜色的绘图,例如,具有setColor(int color)方法 要动态更改png可绘制颜色,请尝试: 编辑: ProgressBar drawable的外观如下所示: <layer-lis

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

使用ProgressBar的方法:

public void setProgressDrawable (Drawable d)
并通过不同颜色的绘图,例如,具有setColor(int color)方法

要动态更改png可绘制颜色,请尝试:


编辑:

ProgressBar drawable的外观如下所示:

<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(与上面类似),提取可绘制的条形图并更改其颜色。

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


好吧,对于任何想通过编程实现的人来说:别忘了为您的绘图设置ID

    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);
将ID设置为drawables是至关重要的,它负责保存进度条的边界和实际状态


(这似乎是某种工作人员提出的解决方案——但只有在您调用setProgress(value)aftrawards时,此值必须与当前进度值不同)

您好,谢谢您的回答,尽管这实际上改变了整个进度条和背景的颜色,而不仅仅是它的进度部分。关于如何只更改进度条的任何线索?
    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);