如何在圆形进度栏中更改颜色?


147

我在Android上使用循环进度栏。我想改变它的颜色。我在用

"?android:attr/progressBarStyleLargeInverse" 

样式。那么如何更改进度条的颜色。

如何自定义样式?此外,样式的定义是什么?

Answers:


163

在res / drawable文件夹中,放入:

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> 

设置startColorendColor根据您的选择。

现在设置progress.xmlProgressBar的backgound。

像这样

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

1
当我使用自定义对话框作为列表视图标题时,它不起作用。是否需要另一种方法?
Pankaj Kumar

22
这将创建一个绿色的环形,但是实际的ProgressBar的微调器仍然可见。
mdupls,2012年

有没有一种方法可以使旋转的颜色仅向一个方向移动?
thepoosh,2012年

48
而不是使用“ android:background”设置背景,而是使用“ android:indeterminateDrawable =“ @ drawable / progress”代替,这是另一个答案所强调的
baekacaek 2013年

1
请使用不同的android:startColor =“#447a29” android:endColor =“#227a29”值,以免形成静态圆圈。
Abhishek Sengupta

137

适用于API 21及更高版本。只需设置indeterminateTint属性。喜欢:

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

要支持API 21之前的设备:

mProgressSpin.getIndeterminateDrawable()
                .setColorFilter(ContextCompat.getColor(this, R.color.colorPrimary), PorterDuff.Mode.SRC_IN );

2
style="?android:attr/progressBarStyle"不起作用
user25

如果我有一个颜色数组,并且想在每个进度条上将颜色设置为一个颜色数组
王子

对于我这个工作得很好,只是改变进度环颜色:)
加斯顿Saillén

感谢您强调API的方面
JamisonMan111 '19

如果我使用这种颜色,则它会为旋转的切割环着色,但全部着色,因此它变成一个完整的环,因此您看不到它在移动
Lucas Zanella

135

1.首先在资源下的drawable文件夹中创建一个xml文件

名为“ 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.然后使用以下代码段制作进度条

<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" />

嗨,穆罕默德,我使用的是自定义进度轮,我试图在运行时更改进度轮的颜色。我尝试过,一旦我单击按钮,进度就会开始。我将颜色设置为绿色。进度达到100%之后,我希望它重新开始,只有这次它的颜色应该是红色。但是,我无法做到这一点..如果可能的话请帮助我
harikrishnan

1
谢谢。它工作100%。将progress.xml设置为android:indeterminateDrawable
Leo Nguyen

当我尝试此操作时,它创建了一个圆形的粗边框。任何想法如何减少边界?
Tejas 2015年

嗨,Tejas,尝试在progress.xml中更改此行android:thicknessRatio =“ 8”。您可以尝试其他值。希望它能工作。
Muhamed Riyas M 2015年

它可以工作,但不是两个环相互旋转,而是一个环。有什么解决办法吗?
AX

66

您可以使用以下代码以编程方式更改颜色:

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

如果要更改ProgressDialog的进度条颜色,可以使用以下方法:

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);

        }
    });

嘿,我如何将ProgressDialog的进度栏与Progress.xml连接起来?
Meghal Agrawal

如果我有一个颜色数组,并且想在每个进度条上将颜色设置为一个颜色数组
王子

36

为了增加拿督的答案,我发现SRC_ATOP是首选的乘以过滤器,因为它更好地支持alpha通道。

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

1
在2.3.x上,这为您提供了一个实心实心圆,其中MULTIPLY可保留透明度。
azdev

如果我有一个颜色数组,并且想在每个进度条上将颜色设置为一个颜色数组
王子

28

android:indeterminateTint =“ @ color / progressbar”


只需在进度栏中使用上述属性即可:indeterminateTint =您的颜色
Bhupinder Singh

最佳答案,它将同时支持所有版本
Pankaj Kumar,

这就是您所需要的,而不是这些疯狂的答案。尽管其他人将从完整的代码块中受益。
StarWind0

7
indeterminateTint可用于API 21或更高版本。如果这对您有用,那就太好了!
安迪·温斯坦

15

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"/>


14
android:indeterminateTint="@color/yellow"

这对我来说是工作,只需将此行添加到您的progressBar xml代码中


12

那对我有用。

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

4
可从API级别21
viplezer '18

11

要自定义圆形ProgressBar,我们需要创建一个indeterminateDrawable以显示自定义进度条

<?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>

我们需要在进度栏中包含可绘制对象,如下所示:

<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" />

rotate之前缺少标记shape。没有它,进度条将是静态的
Renan Bandeira

@RenanBandeira,如果正确,则可以改善答案
Akshay Mukadam '16

9

对我而言,主题无法与accentColor一起使用。但是它确实与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"/>



3

colorControlActivated项目添加到您的活动主题,例如:

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

将此样式应用于清单中的“活动”:

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

3

尝试使用样式并设置colorControlActivated太需要的ProgressBar颜色。

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

然后将ProgressBar的主题设置为新样式。

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

2

您可以使用自定义对话框轻松完成此操作,并重用其他答案中的xml:

<?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>

只是这样做:

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));
    }
}

2

您可以使用一种样式来更改进度的颜色,如下所示

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

并在ProgressBar中使用它,如下所示

<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"
        />

希望能帮助到你。


1

对于所有想知道如何提高自定义进度速度的人

  <?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>


0

如果更改它,它将从Res / Values / Colors.xml-> colorAccent中获取颜色值,progressBar颜色也将更改。


0

android:indeterminateDrawable="@drawable/progress_custom_rotate"

将以下代码用于自定义圆环进度条

复制以下代码并在Drawable文件夹中创建“ progress_custom_rotate.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="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>

0
<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" />

-1

您可以使用以下代码更改进度栏颜色:

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

如果我有一系列颜色,那?
王子
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.