当我添加水平 ProgressBar 时,它的行为符合预期——我设置了进度值并显示它。
但是,当我添加 ProgressBar(圆形)时,它会旋转。就是这样。在这种形式中,任何进度条都更像是“请稍候”指示器,因为未显示进度值。
所以我的问题是(假设名称中的进步意味着进步) - 如何停止旋转并显示进度值?例如,如果我将 max 设置为 100,将 value 设置为 50,我希望看到半圆弧。
换句话说,如何使圆形 ProgressBar 表现得像水平 ProgressBar,只有形状除外?
当我添加水平 ProgressBar 时,它的行为符合预期——我设置了进度值并显示它。
但是,当我添加 ProgressBar(圆形)时,它会旋转。就是这样。在这种形式中,任何进度条都更像是“请稍候”指示器,因为未显示进度值。
所以我的问题是(假设名称中的进步意味着进步) - 如何停止旋转并显示进度值?例如,如果我将 max 设置为 100,将 value 设置为 50,我希望看到半圆弧。
换句话说,如何使圆形 ProgressBar 表现得像水平 ProgressBar,只有形状除外?
我知道这是一篇旧帖子,但我遇到了同样的问题,我让它工作了。
它实际上比您想象的要容易,您必须在可绘制文件夹内的 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,则进度将从圆圈的右侧开始。
希望它可以帮助有相同要求的人。
既然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);
}
}
就像 toadzky 评论的那样,没有烘焙方法。你可以试试这个ProgressWheel。如果不出意外,它应该让您了解如何实现它。
您可以访问进度条的可见性属性,并在需要像这样不可见时将其设置为不可见
ProgressBar progressBar = view.findViewById<ProgressBar>(R.id.progressbar)
progressBar.visibility = ProgressBar.INVISIBLE
对于确定的进度条意味着进度条不会继续旋转,用户可以设置一个固定的百分比。
<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>