181

I am using circular progress bar on Android. I wish to change the color of this. I am using

"?android:attr/progressBarStyleLargeInverse" 

style. So how to change the color of progress bar.

How to custom the style? Furthermore, what is the definition of the style?

23 Answers 23

189

For API 21 and Higher. Simply set the indeterminateTint property. Like:

android:indeterminateTint="@android:color/holo_orange_dark" 

To support pre-API 21 devices:

mProgressSpin.getIndeterminateDrawable() .setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN ); 
Sign up to request clarification or add additional context in comments.

4 Comments

with style="?android:attr/progressBarStyle" doesn't work
If I have an array of colors and I want to set color to a color array on the each progress bar
This worked fine for me, just to change the progressBar ring color :)
If I put this color it colors the spinning cutted ring but all of it, so it turns into a full ring so you dont see it moving
175

In the res/drawable folder, put this:

progress.xml

<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="360"> <shape android:shape="ring" android:innerRadiusRatio="3" android:thicknessRatio="8" android:useLevel="false"> <size android:width="76dip" android:height="76dip" /> <gradient android:type="sweep" android:useLevel="false" android:startColor="#447a29" android:endColor="#00ffffff" android:angle="0"/> </shape> </rotate> 

Set startColor and endColor as per your choice .

Now set that progress.xml in ProgressBar's backgound .

Like this

<ProgressBar android:id="@+id/ProgressBar01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateDrawable="@drawable/progress" /> 

10 Comments

its not working when I am using custom dialog as list view header. Is there need to another approach?
This creates a green ring shape, but the actual ProgressBar's spinner is still visible.
is there a way to make the spinning colors move in only one direction?
Instead of setting the background with "android:background", use "android:indeterminateDrawable="@drawable/progress" instead, as highlighted by another answer
Use android:startColor="#447a29" android:endColor="#227a29" values different so that it doesn't form a static circle.
|
138

1.First Create an xml file in drawable folder under resource

named "progress.xml"

<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:toDegrees="360" > <shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false" > <size android:height="76dip" android:width="76dip" /> <gradient android:angle="0" android:endColor="color/pink" android:startColor="@android:color/transparent" android:type="sweep" android:useLevel="false" /> </shape> </rotate> 

2.then make a progresss bar using the folloing snippet

<ProgressBar style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/relativeLayout1" android:layout_centerHorizontal="true" android:layout_marginBottom="20dp" android:indeterminate="true" android:indeterminateDrawable="@drawable/progress" /> 

7 Comments

Hi Muhamed, i am using custom progress wheel, i tried to change the color in progress wheel at runtime. i am tried for, Once I click on a button, the progress starts. I have set the color as green. After the progress reaches 100%, I want it to start again, only this time its color should be red. But, i could not able to do that.. if possible pls help me
Thanks. It work 100%. set progress.xml to android:indeterminateDrawable
When I tried this, it created a Thick border of circle. Any ideas how to reduce the border ?
Hi Tejas, Try to change this line android:thicknessRatio="8" inside the progress.xml . You can try different values. Hope it will work.
It works but instead of two rings rotating against each other I get just a single ring. Any fix for this?
|
68

You can change color programmatically by using this code :

ProgressBar v = (ProgressBar) findViewById(R.id.progress); v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.MULTIPLY); 

If you want to change ProgressDialog's progressbar color, u can use this :

mDilog.setOnShowListener(new OnShowListener() { @Override public void onShow(DialogInterface dialog) { ProgressBar v = (ProgressBar)mDilog.findViewById(android.R.id.progress); v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.MULTIPLY); } }); 

2 Comments

Hey how will i connect ProgressDialog's Progress Bar With Progress.xml ??
If I have an array of colors and I want to set color to a color array on the each progress bar
39

To add to Dato's answer, i find SRC_ATOP to be a preferable filter to multiply as it better supports the alpha channel.

ProgressBar v = (ProgressBar) findViewById(R.id.progress); v.getIndeterminateDrawable().setColorFilter(0xFFcc0000, android.graphics.PorterDuff.Mode.SRC_ATOP); 

3 Comments

On 2.3.x this gives you a solid filled circle where MULTIPLY preserves transparency.
If I have an array of colors and I want to set color to a color array on the each progress bar
Use compat version: progressBar.indeterminateDrawable.colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(0xffffff, BlendModeCompat.SRC_ATOP)
35

android:indeterminateTint="@color/progressbar"

4 Comments

just use above attribute in progress bar :indeterminateTint= your colour
Best answer and it would support for all versions also
This is all you need, not these crazy answers. Though others would benefit from the full code block.
indeterminateTint is available for API 21 or higher. If that works for you, terrific!
19

styles.xml

<style name="CircularProgress" parent="Theme.AppCompat.Light"> <item name="colorAccent">@color/yellow</item> </style> <ProgressBar android:layout_width="@dimen/d_40" android:layout_height="@dimen/d_40" android:indeterminate="true" style="@style/Widget.AppCompat.ProgressBar" android:theme="@style/CircularProgress"/> 

1 Comment

18

With the Material Components Library you can use the CircularProgressIndicator with these attributes:

  • indicatorColor

  • trackColor

     <com.google.android.material.progressindicator.CircularProgressIndicator android:indeterminate="true" app:trackColor="@color/..." app:indicatorSize="90dp" app:indicatorColor="@color/..." /> 

enter image description here

1 Comment

this one should be the accepted one as for now in 2021
15

That's work for me.

<ProgressBar android:id="@+id/ProgressBar01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminateTint="@color/black"/> 

1 Comment

Available from API level 21
11

To customize circular ProgressBar we need to create a indeterminateDrawable to show custom progress bar

<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:duration="1"> <shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false"> <size android:height="48dip" android:width="48dip" /> <gradient android:centerColor="#f96047" android:centerY="0.50" android:endColor="#fb9c8d" android:startColor="#f72d0c" android:type="sweep" android:useLevel="false" /> </shape> </rotate> 

We need to include drawable in progressbar just as below:

<ProgressBar android:layout_width="wrap_content" android:layout_centerInParent="true" style="?android:attr/progressBarStyleLarge" android:visibility="visible" android:progressDrawable="@drawable/widget_progressbar" android:indeterminateDrawable="@drawable/widget_progressbar" android:layout_height="wrap_content" /> 

2 Comments

rotatetag is missing before shape. Without it, the progressbar will be static
@RenanBandeira you can improve the answer if its correct
11

check this answer out:

for me, these two lines had to be there for it to work and change the color:

android:indeterminateTint="@color/yourColor" android:indeterminateTintMode="src_in" 

PS: but its only available from android 21

1 Comment

The Only best simplest solution
10

for me theme wasn't working with accentColor. But it did work with colorControlActivated

 <style name="Progressbar.White" parent="AppTheme"> <item name="colorControlActivated">@color/white</item> </style> <ProgressBar android:layout_width="@dimen/d_40" android:layout_height="@dimen/d_40" android:indeterminate="true" android:theme="@style/Progressbar.White"/> 

Comments

10
<style name="progressColor" parent="Widget.AppCompat.ProgressBar"> <item name="colorControlActivated">@color/colorPrimary</item> </style> <ProgressBar android:id="@+id/progressBar" android:layout_width="250dp" android:theme="@style/progressColor" android:layout_height="250dp" android:layout_centerInParent="true" /> 

Comments

4

Add to your activity theme, item colorControlActivated, for example:

 <style name="AppTheme.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar"> ... <item name="colorControlActivated">@color/rocket_black</item> ... </style> 

Apply this style to your Activity in the manifest:

<activity android:name=".packege.YourActivity" android:theme="@style/AppTheme.NoActionBar"/> 

Comments

4

To supplement Muhamed Riyas M's top voted answer:

Faster rotation

android:toDegrees="1080" 

Thinner ring

android:thicknessRatio="16" 

Light white

android:endColor="#80ffffff" 

Comments

4

Try using a style and set colorControlActivated too desired ProgressBar color.

<style name="progressColor" parent="Widget.AppCompat.ProgressBar"> <item name="colorControlActivated">@color/COLOR</item> </style> 

Then set the theme of the ProgressBar to new style.

<ProgressBar android:id="@+id/progress_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:theme="@style/progressColor" /> 

Comments

3

You can use a style for changing the color of progress like below

 <style name="AppTheme.anyName"> <item name="colorAccent">YOUR_COLOR</item> </style> 

and use it in the ProgressBar like below

<ProgressBar style="?android:attr/progressBarStyle" android:theme="@style/AppTheme.WhiteAccent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/dimen_30" /> 

Hope it helps.

Comments

2

You can do this with a custom dialog pretty easily, reusing the xml from other answers:

<?xml version="1.0" encoding="utf-8"?> 

<shape android:innerRadiusRatio="3" android:shape="ring" android:thicknessRatio="8" android:useLevel="false" > <size android:height="76dip" android:width="76dip" /> <gradient android:angle="0" android:endColor="@color/oceanBlue" android:startColor="@android:color/transparent" android:type="sweep" android:useLevel="false" /> </shape> 

Just do this:

public static class ModifiedProgressDialog extends ProgressDialog { public ModifiedProgressDialog(Context context) { super(context); } @Override public void show() { super.show(); setIndeterminateDrawable(getContext().getResources().getDrawable(R.drawable.blue_progress)); } } 

Comments

1

For all those wondering how to increase the speed of custom progress

 <?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="1080"><!--HERE YOU COULD INCREASE SPEED BY SETTING TODEGRESS(1080 is 3 loops instead of 1 in same amt of time)--> <shape android:shape="ring" android:innerRadiusRatio="3" android:thicknessRatio="8" android:useLevel="false"> <size android:width="76dip" android:height="76dip" /> <gradient android:type="sweep" android:useLevel="false" android:startColor="#447a29" android:endColor="#447a29" android:angle="0" /> </shape> 

Comments

1

Set android:indeterminateDrawable="@drawable/progress_custom_rotate"

Use Below Code for Custom Circular Ring Progress Bar

Copy Below code and create "progress_custom_rotate.xml" in Drawable folder

<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="1080"> <shape android:shape="ring" android:innerRadiusRatio="3" android:thicknessRatio="8" android:useLevel="false"> <size android:width="48dip" android:height="48dip" /> <gradient android:type="sweep" android:useLevel="false" android:startColor="#4c737373" android:centerColor="#4c737373" android:centerY="0.50" android:endColor="#ffffd300" /> </shape> </rotate> 

Comments

0

It takes color value from your Res/Values/Colors.xml -> colorAccent if you change it, your progressBar color changes aswell.

Comments

0

<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/black</item> <item name="colorPrimaryDark">@color/white</item> <item name="colorAccent">@color/colorAccent</item> </style> <style name="progressColor" parent="Widget.AppCompat.ProgressBar"> <item name="colorControlActivated">@color/black</item> </style> </resources> <ProgressBar android:id="@+id/progressBar2" style="?android:attr/progressBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:theme="@style/progressColor" app:layout_constraintBottom_toBottomOf="@+id/textView3" app:layout_constraintStart_toEndOf="@+id/textView3" app:layout_constraintTop_toTopOf="@+id/textView3" /> 

Comments

-1

You can change your progressbar colour using the code below:

progressBar.getProgressDrawable().setColorFilter( getResources().getColor(R.color.your_color), PorterDuff.Mode.SRC_IN); 

1 Comment

If I have an array of color then ?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.