Android ProgressBar:如何以编程方式设置辅助颜色

我需要以编程方式设置二级进度栏颜色

我只看到方法

ProgressBar.setProgressDrawable(drawable) 

设置原色,但没有设置二次色的方法。

我怎么能做到这一点?

Solutions Collecting From Web of "Android ProgressBar:如何以编程方式设置辅助颜色"

ProgressBar.getProgressDrawable()返回一个LayerDrawable ,其中:

 LayerDrawable progressDrawable = (LayerDrawable) getProgressDrawable(); Drawable backgroundColor = progressDrawable.getDrawable(0); Drawable secondaryColor = progressDrawable.getDrawable(1); Drawable primaryColor = progressDrawable.getDrawable(2); 

我尝试修改颜色白色(示例):

 progressDrawable.setDrawableByLayerId(progressDrawable.getId(2), new ClipDrawable(...)); 

但有时屏幕冻结,有时会崩溃。 最后我放弃了对时间不够的追求。 对不起:(

米歇尔

您使用setProgressDrawable指定的可绘制对象具有背景,主要和次要可绘画。 下面是一个与android一起提供的ProgressBar drawable的例子 :

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <corners android:radius="5dip" /> <gradient ... /> </shape> </item> <item android:id="@android:id/secondaryProgress"> <clip> <shape> <corners android:radius="5dip" /> <gradient .../> </shape> </clip> </item> <item android:id="@android:id/progress"> <clip> <shape> <corners android:radius="5dip" /> <gradient ... /> </shape> </clip> </item> </layer-list> 

可能与Michele不相关,但也许会帮助别人。

 ProgressBar progress = (ProgressBar) fullView.findViewById(R.id.main_progressbar); LayerDrawable progressDrawable = (LayerDrawable)progress.getProgressDrawable(); Drawable drawable = activity.getResources().getDrawable(R.drawable.WHATEVER_YOU_WANT); ClipDrawable cd = new ClipDrawable(drawable, Gravity.LEFT,ClipDrawable.HORIZONTAL); progressDrawable.setDrawableByLayerId(android.R.id.progress, cd); 

检查这个

你可以使用这样的drawable xml来设置progressdrawable

 <item android:id="@android:id/background" android:drawable="@drawable/progress_bar_nor"> </item> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/progress_bar_nor"> </item> <item android:id="@android:id/progress" android:drawable="@drawable/progress_bar_sel"/> 

参考这个链接

https://stackoverflow.com/a/27144594/1554031