我想制作一个材料设计的圆形进度栏,例如Gmail Android应用程序中的“收件箱”中的进度栏。我如何做到这一点(在棒棒糖之前的设备中)?
我试图达到类似的效果。 Inbox by Gmail物料设计圆形进度栏
我想制作一个材料设计的圆形进度栏,例如Gmail Android应用程序中的“收件箱”中的进度栏。我如何做到这一点(在棒棒糖之前的设备中)?
我试图达到类似的效果。 Inbox by Gmail物料设计圆形进度栏
Answers:
<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" />
效果如下所示:
很好的材料设计循环进度条实现(来自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"/>
我已经将三个Material Design进度可移植对象反向移植到了Android 4.0,可以将它们用作ProgressBar
外观完全相同的Regular的替代品。
这些可绘制对象还向后移植了着色API(和RTL支持),并?colorControlActivated
用作默认着色。为了方便起见,还引入了MaterialProgressBar
扩展的小部件ProgressBar
。
DreaminginCodeZH / MaterialProgressBar
该项目还被afollestad / material-dialogs采纳用于进度对话框。
在Android 4.4.4上:
在Android 5.1.1上:
更新资料
从2019年开始,可以使用与样式一起使用ProgressIndicator
的Material Components库中的轻松实现Widget.MaterialComponents.ProgressIndicator.Circular.Indeterminate
。
有关更多详细信息,请在下面查看 Gabriele Mariotti的答案。
旧的实现
这是材料设计圆形中间进度条https://gist.github.com/castorflex/4e46a9dc2c3a4245a28e的出色实现。该实现仅缺乏通过android app在收件箱中添加各种颜色的功能,但这做得很好。
该平台使用矢量可绘制,因此您不能像在旧版本中那样重复使用它。
但是,支持库v4包含此drawable的反向端口:http :
//androidxref.com/5.1.0_r1/xref/frameworks/support/v4/java/android/support/v4/widget/MaterialProgressDrawable.java
它具有@hide
注解(它在SwipeRefreshLayout中),但是没有什么可以阻止您在代码库中复制此类。
通过材料组件库,您可以使用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
正在寻找一种使用simple做到这一点的方法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中设置上述可绘制对象,如下所示:
android:indeterminatedrawable="@drawable/above_drawable"