如何改变圆形进度条的颜色?

我在 Android 上使用圆形进度条。我希望改变这个的颜色。我正在使用

"?android:attr/progressBarStyleLargeInverse"

所以如何改变进度条的颜色。

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

239008 次浏览

在 res/draable 文件夹中,放入以下内容:

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.xml设置为 ProgressBar的后台。

像这样

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

首先在资源下的可绘制文件夹中创建一个 xml 文件

名为“ Progress s.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>

然后使用下面的代码片段创建一个进度条

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

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

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


}
});

为了补充 Dato 的回答,我发现 SRC _ ATOP 是一个更好的过滤器,因为它更好地支持 alpha 通道。

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

要自定义循环进度条,我们需要创建一个 不确定可绘制来显示自定义进度条

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

对于 API 21和更高版本,只需设置 indetateTint 属性,如:

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

支援 API 21前设备:

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

您可以使用下面的代码更改进度条的颜色:

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

您可以通过一个自定义对话框轻松实现这一点,从其他答案中重用 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));
}
}

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

Android: insetateTint = “@color/Progress sbar”

对我来说,这个主题并不适用于 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"/>

添加到您的活动主题,项目 颜色控制激活,例如:

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

这就是我的工作。

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

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

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

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

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

然后像下面这样在 Progress 栏中使用它

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

希望能有帮助。

作为对 穆罕默德 · 里亚斯 · M投票最多答案的补充:

更快的旋转

android:toDegrees="1080"

更薄的戒指

android:thicknessRatio="16"

浅白色

android:endColor="#80ffffff"

看看这个 回答:

对我来说,这两条线必须在那里才能起作用并改变颜色:

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

附言: 但它只能在 android 21上使用

它从 Res/Value/Colors.xml-> color Accent 获取颜色值 如果你改变它,你的进度条颜色也会改变。

尝试使用一种样式并设置 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"
/>

设定 android:indeterminateDrawable="@drawable/progress_custom_rotate"

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

复制下面的代码并在可绘制文件夹中创建“ 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>
<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" />

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

使用材料组件库,你可以使用具有以下属性的 CircularProgressIndicator:

  • indicatorColor

  • trackColor

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

enter image description here