如何在Android中实现材质设计循环进度条


67

我想制作一个材料设计的圆形进度栏,例如Gmail Android应用程序中的“收件箱”中的进度栏​​。我如何做到这一点(在棒棒糖之前的设备中)?

我试图达到类似的效果。 Inbox by Gmail物料设计圆形进度栏




尝试通过穆罕默德AG所建议使用xposed模块系统流畅进度条Prajwal
kenorb

@Zapnologica他们的示例仅适用于android棒棒糖设备,加载微调器内置在棒棒糖中,但我一直在寻找或将其移植回较低的android版本的方法
cozeJ4 2015年

1
@ cozeJ4我希望获得支持库来提供此类内容。
Zapnologica

Answers:


45
<ProgressBar
android:id="@+id/loading_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminateTintMode="src_atop"
android:indeterminateTint="@color/your_customized_color"
android:layout_gravity="center" />

效果如下所示:

img


13
这不适用于棒棒糖之前的设备。棒棒糖之前的设备使用了不同的纺丝可
拉伸

26

很好的材料设计循环进度条实现(来自rahatarmanahmed / CircularProgressView),

<com.github.rahatarmanahmed.cpv.CircularProgressView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/progress_view"
    android:layout_width="40dp"
    android:layout_height="40dp"
    app:cpv_indeterminate="true"/>

在此处输入图片说明


嗨,法欣,您本机的progressBar是什么意思?这是来自Android platfrom吗?我想实现相同类型的对话框,如果可以从android本身或任何支持库中获得,则更好。
cgr

@cgr Native ProgressBar是使用Android SDK实现的进度条。如果您在具有不同Android风格的两台设备上运行此应用程序(例如:Jelly Beans和Lollipop),则会看到不同的进度条。自己尝试。
Filipe Brito

超级简单,谢谢。添加不透明背景色的最佳方法是什么?就像我想在较大的白色背景圆圈上用黑色弧形圆圈制成gmail类型的指示器吗?
Mike Purcell

23

我已经将三个Material Design进度可移植对象反向移植到了Android 4.0,可以将它们用作ProgressBar外观完全相同的Regular的替代品。

这些可绘制对象还向后移植了着色API(和RTL支持),并?colorControlActivated用作默认着色。为了方便起见,还引入了MaterialProgressBar扩展的小部件ProgressBar

DreaminginCodeZH / MaterialProgressBar

该项目还被afollestad / material-dialogs采纳用于进度对话框。

在Android 4.4.4上:

Android 4.4.4

在Android 5.1.1上:

Android 5.1.1


1
感谢您的所有努力!很棒的图书馆!保持下去!
Filipe Brito

非常优雅的解决方案,在我看来,最好的一个
a.ch.

感谢图书馆!有没有办法改变微调框的颜色?
罗伊姆森

1
@Roymunson查看自述文件和有关app:mpb_progressTint等的段落
Hai Zhang

16

更新资料

从2019年开始,可以使用与样式一起使用ProgressIndicatorMaterial Components库中的轻松实现Widget.MaterialComponents.ProgressIndicator.Circular.Indeterminate

有关更多详细信息,请在下面查看 Gabriele Mariotti的答案。

旧的实现

这是材料设计圆形中间进度条https://gist.github.com/castorflex/4e46a9dc2c3a4245a28e的出色实现。该实现仅缺乏通过android app在收件箱中添加各种颜色的功能,但这做得很好。


9

除了cozeJ4的答案,这是该要点更新版本

原始的缺少进口并且包含一些错误。这是准备使用。


1
您能解释一下如何使用吗?
Devendra Singh

复制这些类,将包更改为项目的包,然后使用MaterialProgressBar作为布局中的视图,仅此
而已

但是我想像这样显示一个异步任务结束时pro.bar aiso必须完成。
Devendra Singh

哇!多谢,伙计。使用com.rey.material库使我免于麻烦。
MDP

您也有线性版本吗?
MDP

6

该平台使用矢量可绘制,因此您不能像在旧版本中那样重复使用它。
但是,支持库v4包含此drawable的反向端口:http : //androidxref.com/5.1.0_r1/xref/frameworks/support/v4/java/android/support/v4/widget/MaterialProgressDrawable.java 它具有@hide注解(它在SwipeRefreshLayout中),但是没有什么可以阻止您在代码库中复制此类。


好了,现在我们有VectorDrawableCompat,你可能只能够重复使用相同的绘制
Teovald

6

通过材料组件库,您可以使用CircularProgressIndicator

就像是:

<com.google.android.material.progressindicator.CircularProgressIndicator
      android:indeterminate="true"          
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      app:indicatorColor="@array/progress_colors"
      app:circularRadius="xxdp"
      app:growMode="incoming"/>

array/progress_colors颜色数组在哪里:

  <integer-array name="progress_colors">
    <item>@color/yellow_500</item>
    <item>@color/blue_700</item>
    <item>@color/red_500</item>
  </integer-array>

在此处输入图片说明

注意:至少需要版本1.3.0-alpha04


这个进度条对PreLolipop的支持是什么?
Stoycho Andreev

1
@StoychoAndreev当前的minSdk = 14
Gabriele Mariotti

4

正在寻找一种使用simple做到这一点的方法xml,但是找不到任何有用的答案,因此提出了这个建议。

这也适用于棒棒糖之前的版本,并且非常接近材料设计进度条。你只需要使用这个drawable作为indeterminate drawableProgressBar布局。

<?xml version="1.0" encoding="utf-8"?><!--<layer-list>-->
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromDegrees="0"
    android:toDegrees="360">
    <layer-list>
        <item>
            <rotate xmlns:android="http://schemas.android.com/apk/res/android"
                android:fromDegrees="-90"
                android:toDegrees="-90">
                <shape
                    android:innerRadiusRatio="2.5"
                    android:shape="ring"
                    android:thickness="2dp"
                    android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->

                    <gradient
                        android:angle="0"
                        android:endColor="#007DD6"
                        android:startColor="#007DD6"
                        android:type="sweep"
                        android:useLevel="false" />
                </shape>
            </rotate>
        </item>
        <item>
            <rotate xmlns:android="http://schemas.android.com/apk/res/android"
                android:fromDegrees="0"
                android:toDegrees="270">
                <shape
                    android:innerRadiusRatio="2.6"
                    android:shape="ring"
                    android:thickness="4dp"
                    android:useLevel="true"><!-- this line fixes the issue for lollipop api 21 -->
                    <gradient
                        android:angle="0"
                        android:centerColor="#FFF"
                        android:endColor="#FFF"
                        android:startColor="#FFF"
                        android:useLevel="false" />
                </shape>
            </rotate>
        </item>
    </layer-list>
</rotate>

在ProgressBar中设置上述可绘制对象,如下所示:

  android:indeterminatedrawable="@drawable/above_drawable"

未知属性android:indeterminatedrawable
appukrb

动画完全不同。
Phatee P
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.