如何在Android中创建循环ProgressBar?[关闭]


152

您是否知道如何制作类似于Google Fit应用程序之一的圆形进度栏?如下图所示。

在此处输入图片说明


7
实际上,我最近做了类似的事情。这可能是一个有用的起点吗?github.com/daentech/CircularDemo
daentech 2014年

@daentech太好了!谢谢
Mohamed 2014年

1
有人得到了一个答案,在该例子中,加载部件的边缘像示例中的那样是圆角的?
Siebe 2014年

1
@Siebe您可以使用我在答案中提到的库。可以对其进行自定义以根据需要获取零件。
WannaBeGeek 2014年

2
也许这可以为您指明
gmemario 2015年

Answers:


128

您可以尝试这个Circle Progress

在此处输入图片说明

在此处输入图片说明

注意:请始终使用相同的宽度和高度查看进度

DonutProgress:

 <com.github.lzyzsd.circleprogress.DonutProgress
        android:id="@+id/donut_progress"
        android:layout_marginLeft="50dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        custom:circle_progress="20"/>

CircleProgress:

  <com.github.lzyzsd.circleprogress.CircleProgress
        android:id="@+id/circle_progress"
        android:layout_marginLeft="50dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        custom:circle_progress="20"/>

ArcProgress:

<com.github.lzyzsd.circleprogress.ArcProgress
        android:id="@+id/arc_progress"
        android:background="#214193"
        android:layout_marginLeft="50dp"
        android:layout_width="100dp"
        android:layout_height="100dp"
        custom:arc_progress="55"
        custom:arc_bottom_text="MEMORY"/>

它们如何在受保护的void上尝试setProgress时显示正在执行的值onProgressUpdate(){super.onProgressUpdate(); Log.d(TAG,“ onProgressUpdate”); progressBar.setProgress(progressBar.getProgress()+ j); Log.d(TAG,“ onProgressUpdate perc:” + j); updateMemoryAndCountValues(); },但无法正常工作
-Erum

@Top Cat我如何添加动画,例如放大圆圈进度或mikinw.blogspot.com/2013/03/glow-effect.html
user3233280 2014年

29
最高许可
radu122

19
WTF许可证。哈哈。
z21

1
获取未绑定的前缀错误
Animesh Mangla 2015年

338

自己创建这个很容易

在您的布局中,包括以下内容ProgressBar和特定的可绘制对象(请注意,应改为从尺寸获取宽度)。最大值在这里很重要:

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:max="500"
    android:progress="0"
    android:progressDrawable="@drawable/circular" />

现在,使用以下形状在您的资源中创建可绘制对象。使用半径(可以innerRadius代替innerRadiusRatio)和厚度值来播放。

圆形(棒棒糖之前或API级别<21)

   <shape
        android:innerRadiusRatio="2.3"
        android:shape="ring"
        android:thickness="3.8sp" >
        <solid android:color="@color/yourColor" />
   </shape>

循环(> = Lollipop或API级别> = 21)

    <shape
        android:useLevel="true"
        android:innerRadiusRatio="2.3"
        android:shape="ring"
        android:thickness="3.8sp" >
        <solid android:color="@color/yourColor" />
     </shape>

在API级别21(Lollipop)中,useLevel默认为“ false”

开始动画

接下来,在代码中使用ObjectAnimatorProgessBar为布局的进度字段添加动画效果。

ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
ObjectAnimator animation = ObjectAnimator.ofInt(progressBar, "progress", 0, 500); // see this max value coming back here, we animate towards that value
animation.setDuration(5000); // in milliseconds
animation.setInterpolator(new DecelerateInterpolator());
animation.start();

停止动画

progressBar.clearAnimation();

PS与上面的示例不同,它提供了流畅的动画。


6
如果您遵循此步骤,则99%的用户会确保获得结果。
Murtaza Khursheed Hussain,2015年

5
奇迹般有效。希望我可以多次投票
Mushtaq Jameel

2
对我不起作用该视图不可见
JMRboosties15年

9
我不知道您在做什么,视图不可见不是完整的问题描述
Murtaza Khursheed Hussain 2015年

6
您的答案看起来可能效果很好..但一张图片= 1000字..因此,如果您将输出添加为屏幕截图,则可能对将来的用户有用-IMHO
Ranjith Kumar
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.