如何让ProgressBar停止旋转?

时间:2012-10-16 17:38:42

标签: android android-progressbar

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

然而,当我添加ProgressBar(圆形)时,它会旋转。就是这样。在这种形式下,它更“请等待”指示,即任何进度条,因为没有显示进度值。

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

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

5 个答案:

答案 0 :(得分:9)

我知道这是一篇很老的帖子,但是我遇到了同样的问题,我让它发挥作用。

它实际上比您想象的要容易,您必须在可绘制文件夹中的xml文件中设置自定义进度并处理属性" 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度开始,对于我来说,它是进度条视图的顶部并且向右,它将继续朝着相同的程度,这将使视图进度开始并以相同的程度结束。

注意: 如果你为&#34; fromDegrees&#34;设置0 &#34; toDegrees&#34;进展将从圈子的右侧开始。

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

就像toadzky评论的那样,没有一种烘焙方法。你可以尝试这个ProgressWheel。如果没有别的,它应该让你知道如何实现它。

答案 3 :(得分: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" />

用于将绘图添加到上方的进度条

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

答案 4 :(得分:0)

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

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

progressBar.visibility = ProgressBar.INVISIBLE