如何在Android中轻松更改progressBar的颜色?
我想动态更新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的方法:
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);