32

当我添加水平 ProgressBar 时,它的行为符合预期——我设置了进度值并显示它。

但是,当我添加 ProgressBar(圆形)时,它会旋转。就是这样。在这种形式中,任何进度条都更像是“请稍候”指示器,因为未显示进度值。

所以我的问题是(假设名称中的进步意味着进步) - 如何停止旋转并显示进度值?例如,如果我将 max 设置为 100,将 value 设置为 50,我希望看到半圆弧。

换句话说,如何使圆形 ProgressBar 表现得像水平 ProgressBar,只有形状除外?

4

5 回答 5

16

我知道这是一篇旧帖子,但我遇到了同样的问题,我让它工作了。

它实际上比您想象的要容易,您必须在可绘制文件夹内的 xml 文件中设置自定义进度,并处理 <rotate> 标签中的“fromDegrees”和“toDegrees”属性:

这是 custom_progress.xml 的代码(您可以根据需要自定义,但不能修改“fromDegrees”和“toDegrees”)

<?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:innerRadiusRatio="2.3"
            android:shape="ring"
            android:useLevel="false"
            android:type="sweep"
            android:thicknessRatio="15.0">
            <solid android:color="#0099ff"/>
        </shape>
    </item>
    <item android:id="@android:id/progress">
        <rotate
            android:pivotX="50%"
            android:pivotY="50%"
            android:fromDegrees="-90"
            android:toDegrees="-90">
            <shape
                android:innerRadiusRatio="2.3"
                android:shape="ring"
                android:angle="0"
                android:type="sweep"
                android:thicknessRatio="15.0">
                <solid android:color="#e0e0e0"/>
            </shape>
        </rotate>
    </item>
</layer-list>

对于您的进度条,您必须设置以下属性:

<ProgressBar
    android:id="@+id/progressbar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:indeterminate="false"
    android:max="100"
    android:progress="20"
    android:progressDrawable="@drawable/custom_progress" />

这里发生的情况是进度将从 -90 度开始,这对我来说是进度条视图的顶部并且向右,它将继续朝着相同的度数,这将使视图进度开始和结束相同的程度。

注意: 如果您将“fromDegrees”和“toDegrees”都设置为 0,则进度将从圆圈的右侧开始。

希望它可以帮助有相同要求的人。

于 2017-05-18T18:25:36.117 回答
7

既然Api 21您可以这样做:假设您ProgressBar以这种方式定义:

 <ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
    style="?android:attr/progressBarStyleLarge"
    android:id="@+id/progress_bar"
    android:layout_width="@dimen/item_width"
    android:layout_height="@dimen/item_height"
    android:clickable="false"
    android:indeterminate="true"
    android:indeterminateDrawable="@drawable/progress"/>

这是progress.xml

<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/colorGrayText"
        android:startColor="@android:color/transparent"
        android:type="sweep"
        android:useLevel="false" />

</shape>

现在你可以在你的ProgressBar

 ProgressBar progressBar = (ProgressBar) findViewById(R.id.progress_bar);
        if (progressBar != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                RotateDrawable rotateDrawable = (RotateDrawable) progressBar.getIndeterminateDrawable();
                rotateDrawable.setToDegrees(0);
            }
        }
于 2016-03-03T11:57:15.143 回答
2

就像 toadzky 评论的那样,没有烘焙方法。你可以试试这个ProgressWheel。如果不出意外,它应该让您了解如何实现它。

于 2012-10-16T17:44:18.677 回答
0

您可以访问进度条的可见性属性,并在需要像这样不可见时将其设置为不可见

ProgressBar progressBar = view.findViewById<ProgressBar>(R.id.progressbar)

progressBar.visibility = ProgressBar.INVISIBLE
于 2021-04-30T15:13:08.493 回答
0

对于确定的进度条意味着进度条不会继续旋转,用户可以设置一个固定的百分比。

<ProgressBar
                android:id="@+id/pb_sharpness"
                style="@style/Widget.AppCompat.ProgressBar.Horizontal"
                android:layout_width="@dimen/dp_50"
                android:layout_height="@dimen/dp_50"
                android:layout_marginTop="@dimen/dp_16"
                android:indeterminate="false"
                android:max="100"
                android:progressDrawable="@drawable/custom_progress_bar"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

用于将drawable添加到上面的进度条

 <?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:innerRadiusRatio="2.3"
        android:shape="ring"
        android:useLevel="false"
        android:type="sweep"
        android:thicknessRatio="15.0">
        <solid android:color="@color/white_color"/>
    </shape>
</item>
<item android:id="@android:id/progress">
    <rotate
        android:pivotX="50%"
        android:pivotY="50%"
        android:fromDegrees="180"
        android:toDegrees="0"
        >
        <shape
            android:innerRadiusRatio="2.3"
            android:shape="ring"
            android:angle="0"
            android:type="sweep"
            android:thicknessRatio="15.0">
            <gradient
                android:startColor="@color/color_5646F3"
                android:endColor="@color/color_ED88FE" />
        </shape>
    </rotate>
</item>
于 2020-08-17T14:30:34.680 回答