我想制作一个材料设计循环进度条,就像收件箱中的Gmail安卓程序一样。我如何实现这一点(在棒棒糖前设备中)?
我试图达到类似的效果。 Inbox by Gmail material design circular progress bar
答案 0 :(得分:33)
<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" />
效果如下:
答案 1 :(得分: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"/>
答案 2 :(得分:23)
我已经将三个Material Design进度绘图向后移植到Android 4.0,它可以作为常规ProgressBar
的替代品替换,外观完全相同。
这些drawable还向后移植了着色API(和RTL支持),并使用?colorControlActivated
作为默认色调。为方便起见,还引入了扩展MaterialProgressBar
的{{1}}小部件。
DreaminginCodeZH/MaterialProgressBar
afollestad/material-dialogs已采用此项目进行进度对话。
在Android 4.4.4上:
在Android 5.1.1上:
答案 3 :(得分:15)
这是材料设计循环中间进度条https://gist.github.com/castorflex/4e46a9dc2c3a4245a28e的一个很棒的实现。实现只缺乏添加各种颜色的能力,如Android应用程序的收件箱,但这确实很棒。
答案 4 :(得分:9)
除 cozeJ4的回答外,这里还有updated version of that gist
原始版本缺少导入并包含一些错误。这个就可以使用了。
答案 5 :(得分:6)
平台使用矢量绘图,因此您无法像旧版本那样重复使用它
但是,支持lib v4包含此drawable的backport:
http://androidxref.com/5.1.0_r1/xref/frameworks/support/v4/java/android/support/v4/widget/MaterialProgressDrawable.java
它有一个sudo apt-get install ruby-dev
注释(它在这里用于SwipeRefreshLayout),但没有什么可以阻止你在代码库中复制这个类。
答案 6 :(得分: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
答案 7 :(得分:4)
正在寻找使用简单xml
执行此操作的方法,但找不到任何有用的答案,所以想出了这个。
这也适用于棒棒糖前版本,并且非常接近材料设计进度条。您只需要将此drawable
用作indeterminate drawable
布局中的ProgressBar
。
<?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中设置上面的drawable,如下所示:
android:indeterminatedrawable="@drawable/above_drawable"