在Android中通过CODE ONLY更改进度条颜色

我在这里读了很多话题,但是我找不到答案。 我有一个使用ProgressBar类的progressBar。

只是这样做:

progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); 

我需要改变那个的颜色,使用像这样的input值:

 int color = "red in RGB value".progressBar.setColor(color) 

或类似的东西…

我无法使用XML布局,因为进度条可以为用户定制。 如果你能帮我这么做,我将不胜感激。

感谢您的时间,

Solutions Collecting From Web of "在Android中通过CODE ONLY更改进度条颜色"

这将帮助很多没有必要做这么多的编码:)

 ProgressBar spinner = new android.widget.ProgressBar( context, null, android.R.attr.progressBarStyle); spinner.getIndeterminateDrawable().setColorFilter(0xFFFF0000,android.graphics.PorterDuff.Mode.MULTIPLY); 

正如我在这里find了一个关于主题的帮助,但是不记得这个链接,我发布了完整的解决scheme,这对我的需求非常有用:

  // Draw a simple progressBar from xml progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal); // Convert the color (Decimal value) to HEX value: (eg: #4b96a0) String color = colorDecToHex(75, 150, 160); // Define a shape with rounded corners final float[] roundedCorners = new float[] { 5, 5, 5, 5, 5, 5, 5, 5 }; ShapeDrawable pgDrawable = new ShapeDrawable(new RoundRectShape(roundedCorners, null, null)); // Sets the progressBar color pgDrawable.getPaint().setColor(Color.parseColor(color)); // Adds the drawable to your progressBar ClipDrawable progress = new ClipDrawable(pgDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL); progressBar.setProgressDrawable(progress); // Sets a background to have the 3D effect progressBar.setBackgroundDrawable(Utils.getActivity().getResources() .getDrawable(android.R.drawable.progress_horizontal)); // Adds your progressBar to your layout contentLayout.addView(progressBar); 

这里是将DECIMAL颜色值转换为HEXADECIMAL的代码:

 public static String colorDecToHex(int p_red, int p_green, int p_blue) { String red = Integer.toHexString(p_red); String green = Integer.toHexString(p_green); String blue = Integer.toHexString(p_blue); if (red.length() == 1) { red = "0" + red; } if (green.length() == 1) { green = "0" + green; } if (blue.length() == 1) { blue = "0" + blue; } String colorHex = "#" + red + green + blue; return colorHex; } 

我认为最后一种方法不是那么干净,但是效果很好。

希望这个帮助,在这个进度条上浪费了太多的时间。

可以通过设置进度条上的颜色filter来绘制进度条的颜色:

 Drawable drawable = progressBar.getProgressDrawable(); drawable.setColorFilter(new LightingColorFilter(0xFF000000, customColorInt)); 

在你需要用不同的颜色着色背景和进度条的情况下。

progress_drawable.xml

 <?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 android:shape="rectangle" > <solid android:color="@color/white" /> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <solid android:color="@color/green" /> </shape> </clip> </item> </layer-list> 

它可以通过编程的方式来分解它的图层列表项目,并分别着色它们:

 LayerDrawable progressBarDrawable = (LayerDrawable) progressBar.getProgressDrawable(); Drawable backgroundDrawable = progressBarDrawable.getDrawable(0); Drawable progressDrawable = progressBarDrawable.getDrawable(1); backgroundDrawable.setColorFilter(ContextCompat.getColor(this.getContext(), R.color.white), PorterDuff.Mode.SRC_IN); progressDrawable.setColorFilter(ContextCompat.getColor(this.getContext(), R.color.red), PorterDuff.Mode.SRC_IN); 

这适用于我与AppCompat:DrawableCompat.setTint(progressBar.getProgressDrawable(),tintColor);

更新

在更新版本的Android(21作品)中,您可以通过使用setProgressTintList以编程方式更改进度条的颜色。

要将其设置为红色,请使用:

 //bar is a ProgressBar bar.setProgressTintList(ColorStateList.valueOf(Color.RED)); 

我通过drawablexml中给出了默认的颜色

我已经改变它编程。

activity_splasg.xml

 <ProgressBar android:id="@+id/splashProgressBar" android:progressDrawable="@drawable/splash_progress_drawable" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" style="?android:attr/progressBarStyleHorizontal" android:layout_alignParentBottom="true" /> 

splash_progress_drawable.xml

 <?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> <solid android:color="@android:color/transparent" /> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <solid android:color="#e5c771" /> </shape> </clip> </item> </layer-list> 

现在如何以编程方式更改ProgressDrawable颜色

 ProgressBar splashProgressBar = (ProgressBar)findViewById(R.id.splashProgressBar); Drawable bgDrawable = splashProgressBar.getProgressDrawable(); bgDrawable.setColorFilter(Color.BLUE, android.graphics.PorterDuff.Mode.MULTIPLY); splashProgressBar.setProgressDrawable(bgDrawable); 

希望这会帮助你。

这篇文章是你要找的: 如何在Android中更改进度条的进度颜色

如果您希望用户select自己的颜色,只需为每种颜色制作多个可绘制的XML文件,然后根据用户的select进行select。

progressbar.setIndeterminateTintList(ColorStateList.valueOf(Color.RED));

它只适用于API 21以上

Layout = activity_main.xml:

 <ProgressBar android:id="@+id/circle_progress_bar_middle" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerInParent="true" android:max="100" android:rotation="-90" android:indeterminate="false" android:progressDrawable="@drawable/my_drawable_settings2" /> 

在Java活动/片段:

 ProgressBar myProgressBar = (ProgressBar) view.findViewById(R.id.circle_progress_bar_middle); myProgressBar.setProgressDrawable(getResources().getDrawable(R.my_drawable_settings1)); 

您的drawable / mipmap文件夹中的my_drawable_settings1.xml文件:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@android:id/progress"> <shape android:innerRadius="55dp" android:shape="ring" android:thickness="9dp" android:useLevel="true"> <gradient android:startColor="#3594d1" android:endColor="@color/white" android:type="sweep" /> </shape> </item> </layer-list> 

其中my_drawable_settings1和my_drawable_settings2.xml具有不同的颜色。

如果你想以编程的方式改变进度条的颜色,那么你复制过去这个代码是100%

  mainProgressBar.getIndeterminateDrawable().setColorFilter(Color.GREEN, PorterDuff.Mode.MULTIPLY);