Jetpack Compose - CircularProgressIndicator、LinearProgressIndicator

  • 0、介绍
  • 1、属性一览
  • 2、使用示例
    • 2.1、CircularProgressIndicator 无限循环
    • 2.1、CircularProgressIndicator按进度变化
    • 2.3、LinearProgressIndicator无限循环
    • 2.4、LinearProgressIndicator按进度变化
    • 2.5、为进度添加动画
  • 3、版本更新
  • 4、未解决问题

Compose系列文章,请点原文阅读。原文,是时候学习Compose了!

0、介绍

  • CircularProgressIndicator

CircularProgressIndicator是一个圆形进度指示器,它通过绘制一个从0到360度的弧线来表示进度。它分为有确定进度和没有确定进度的两种指示器。默认情况下进度值之间没有动画,可以使用ProgressIndicatorDefaults.ProgressAnimationSpec作为默认的AnimationSpec。

  • LinearProgressIndicator

LinearProgressIndicator是一个线形进度指示器,它通过绘制一条水平线来表示进度。它分为有确定进度和没有确定进度的两种指示器。默认情况下进度值之间没有动画,可以使用ProgressIndicatorDefaults.ProgressAnimationSpec作为默认的AnimationSpec。

1、属性一览

【目前基于alpha09版本】

  • CircularProgressIndicator函数:
@Composable fun CircularProgressIndicator(@FloatRange(0.0, 1.0) progress: Float, modifier: Modifier = Modifier, color: Color = MaterialTheme.colors.primary, strokeWidth: Dp = ProgressIndicatorDefaults.StrokeWidth
): Unit
@Composable fun CircularProgressIndicator(modifier: Modifier = Modifier, color: Color = MaterialTheme.colors.primary, strokeWidth: Dp = ProgressIndicatorDefaults.StrokeWidth
): Unit

属性参数含义:

参数 含义
modifier: Modifier = Modifier 应用于布局的修饰符
progress: Float 此进度指示器的进度,其中0.0表示没有进度,1.0表示已完成进度。超出此范围的值将强制使用该范围。
color: Color = MaterialTheme.colors.primary 进度指示器的颜色
strokeWidth: Dp = ProgressIndicatorDefaults.StrokeWidth 进度指示器的宽度

对于第一个函数没有progress参数,表明它是一个没有确定进度的指示器,所以显示在页面上是一个无线循环的圆形指示器,见下文示例。

  • LinearProgressIndicator函数
@Composable fun LinearProgressIndicator(@FloatRange(0.0, 1.0) progress: Float, modifier: Modifier = Modifier, color: Color = MaterialTheme.colors.primary, backgroundColor: Color = color.copy(alpha = IndicatorBackgroundOpacity)
): Unit
@Composable fun LinearProgressIndicator(modifier: Modifier = Modifier, color: Color = MaterialTheme.colors.primary, backgroundColor: Color = color.copy(alpha = IndicatorBackgroundOpacity)
): Unit

属性参数含义:

参数 含义
modifier: Modifier = Modifier 应用于布局的修饰符
progress: Float 此进度指示器的进度,其中0.0表示没有进度,1.0表示已完成进度。超出此范围的值将强制使用该范围。
color: Color = MaterialTheme.colors.primary 进度指示器的颜色
backgroundColor: Color = color.copy(alpha = IndicatorBackgroundOpacity) 指示器后面的背景颜色,当进度尚未达到整个指示器的区域时可见

2、使用示例

2.1、CircularProgressIndicator 无限循环

@Composable
fun ProgressCircularLoopDemo() {Column(horizontalAlignment = Alignment.CenterHorizontally,modifier = Modifier.fillMaxWidth()) {CircularProgressIndicator()}
}

效果如下所示:

2.1、CircularProgressIndicator按进度变化

我们通过点击按钮,让进度条每次递增10%的进度,目前没有添加动画的实现:

@Composable
fun ProgressCircularDemo() {val rememberProgress = remember { mutableStateOf(0.1f) }Column(horizontalAlignment = Alignment.CenterHorizontally,modifier = Modifier.fillMaxWidth()) {CircularProgressIndicator(progress = rememberProgress.value)Spacer(Modifier.height(30.dp))TextButton(onClick = {if (rememberProgress.value < 1f) rememberProgress.value += 0.1f}) {Text(text = "增加进度")}}
}

效果如下所示:

2.3、LinearProgressIndicator无限循环

@Composable
fun ProgressCircularLoopDemo() {Column(horizontalAlignment = Alignment.CenterHorizontally,modifier = Modifier.fillMaxWidth()) {CircularProgressIndicator()}
}

效果如下所示:

2.4、LinearProgressIndicator按进度变化

我们同样通过点击按钮来让进度依次递增10%来实现,代码如下:

@Composable
fun ProgressLinearDemo() {val rememberProgress = remember { mutableStateOf(0.1f) }Column(horizontalAlignment = Alignment.CenterHorizontally,modifier = Modifier.fillMaxWidth()) {LinearProgressIndicator(progress = rememberProgress.value)Spacer(Modifier.height(30.dp))TextButton(onClick = {if (rememberProgress.value < 1f) rememberProgress.value += 0.1f}) {Text(text = "增加进度")}}
}

效果如下所示:

2.5、为进度添加动画

关于动画这一块我们还没有研究完整,动画的文章还在整理中,但是我们目前需要快速入门一个动画函数:

@Composable
fun animate(target: Float,animSpec: AnimationSpec<Float> = defaultAnimation,visibilityThreshold: Float = 0.01f,endListener: ((Float) -> Unit)? = null
):

第一个参数表示动画的目标值,第二个是用于改变数值的动画,根据官方的描述我们可以使用ProgressIndicatorDefaults.ProgressAnimationSpec,目前就使用这个函数两个参数搭配线性进度指示器,我们来看下代码:

@Composable
fun ProgressLinearDemo() {val rememberProgress = remember { mutableStateOf(0.1f) }//添加动画val animatedProgress = animate(target = rememberProgress.value,animSpec = ProgressIndicatorDefaults.ProgressAnimationSpec)Column(horizontalAlignment = Alignment.CenterHorizontally,modifier = Modifier.fillMaxWidth()) {LinearProgressIndicator(progress = animatedProgress)Spacer(Modifier.height(30.dp))TextButton(onClick = {if (rememberProgress.value < 1f) rememberProgress.value += 0.1f}) {Text(text = "增加进度")}}
}

效果如下所示:


可以看到比之前生硬改变进度的效果柔和了许多,有了一个渐变增加进度的效果。

3、版本更新

  • 暂无

4、未解决问题

基本的进度条效果已经实现了,但是目前相比XML中的进度条还少了第一进度第二进度的概念,这在视频应用中可能比较常见,最底层是视频时长总进度,第二进度是视频缓冲进度,第一进度是当前观看的进度。
但是我们通过查看LinearProgressIndicator的源码可以看到这些都是继承自Canvas实现的,而且我们可以根据源码很简单的就能模拟实现上述功能,大家可以自行尝试下。再往下可以看到线性指示器最终是通过drawLine来实现的,大胆假设下,我们同样也可以通过drawRoundRect来实现圆角的线性进度指示器。

Jetpack Compose - CircularProgressIndicator、LinearProgressIndicator相关推荐

  1. Jetpack Compose - Row、Column

    Jetpack Compose - Row.Column 0.介绍 1.属性一览 2.使用示例 3.版本更新 4.未解决问题 Compose系列文章,请点原文阅读.原文,是时候学习Compose了! ...

  2. Jetpack Compose——remember、mutableStateOf、rememberSaveable

    1,mutableStateOf:标识这个data是有状态的,如果状态发生了改变,所有引用这个状态的View都需要重新绘制 2,remember:存储值,当界面重新绘制,会读取之前的值,相当于在mut ...

  3. Jetpack Compose中的手势操作

    点击事件 监听点击事件非常简单,使用 clickable 和 combinedClickable 修饰符即可满足需求: @OptIn(ExperimentalFoundationApi::class) ...

  4. Jetpack Compose 实战 宝可梦图鉴

    文章目录 前言 实现效果 一.架构介绍 二.一些的功能点的介绍 加载图片并获取主色,再讲主色设置为背景 一个进度缓慢增加的圆形进度条 单Activity使用navigation跳转Compose可组合 ...

  5. Jetpack Compose中的Accompanist

    accompanist是Jetpack Compose官方提供的一个辅助工具库,以提供那些在Jetpack Compose sdk中目前还没有的功能API. 权限 依赖配置: repositories ...

  6. 随输入动态改变ui_深入详解 Jetpack Compose | 优化 UI 构建

    人们对于 UI 开发的预期已经不同往昔.现如今,为了满足用户的需求,我们构建的应用必须包含完善的用户界面,其中必然包括动画 (animation) 和动效 (motion),这些诉求在 UI 工具包创 ...

  7. 移动开发 Jetpack Compose 组件布局

    Jetpack Compose 是用于构建原生 Android 界面的新工具包.它可简化并加快 Android 上的界面开发,使用更少的代码.强大的工具和直观的 Kotlin API,快速让应用生动而 ...

  8. 在 Jetpack Compose 中安全地使用数据流

    /   今日科技快讯   / 11月17日下午,暴雪中国官方微博发布公告称,各位暴雪游戏的国服玩家,我们很遗憾地通知大家,随着我们与网之易公司现有授权协议的到期,自2023年1月24日0点起,所有&l ...

  9. Jetpack Compose 自定义绘制——高仿Keep周运动数据页面

    废话之前先上图吧,如果不是有人告诉,你可以一眼看出哪个是真哪个是假吗? 仿制整个页面(仅仅页面)大概花了我两个小时,不过仅仅是静态的.不可点击的.图有形似而无功能. 自定义绘制 Jetpack Com ...

  10. 使用Jetpack Compose竟能做出如此漂亮的倒计时APP

    Compose开发者挑战赛二周目 迎合Jetpack Compose beta版的发布,Google官方发起了Compose开发者挑战赛活动,目前已经入二周目 android-dev-challeng ...

最新文章

  1. linux监控平台搭建-内存
  2. 数据结构和算法,到底有多重要?
  3. Android edittext 属性inputtype详解
  4. 分布式系统中处理参数配置的 4 种方案
  5. 有关Java中json字符串与map的转换使用
  6. oracle行级的触发器,Oracle触发器Trigger2行级
  7. 《JavaScript高级程序设计》第8-9章
  8. 【Daily Scrum】11-26
  9. yum 安装mysql数据库
  10. css3 object-fit详解
  11. 为GitHub项目加入Travis-CI的自动集成
  12. from xx is not a valid DFS filename
  13. 用ostringstream与istringstream转化字符串
  14. Atitit 2017年的技术趋势与未来的大技术趋势 1. 2017年的技术趋势 2 1.1. Web not native 2 1.2. 更加移动优先 ,,more spa 3 1.3. Ar
  15. 优秀 java工程师 简历
  16. 关于SMC的源式,汇式(漏式)。PNP和NPN的说明与区别
  17. W806+ST7735R+tftLCD程序开发
  18. 安防摄像头RTSP/Onvif协议网页无插件直播视频流媒体服务器EasyNVR之按需直播如何有效利用最大上行带宽
  19. 两轮电自2.0时代开启 小牛电动以独立主见创造新物种
  20. 温度报警器 c语言,红外遥控温度报警器

热门文章

  1. CryEngine3SDK尝鲜
  2. 持续测试(Continuous Testing)
  3. hexo-theme-icarus配置 valine 评论系统
  4. 深度Linux deepin更新,防火墙操作
  5. 我制作了python脚本自动抢购淘宝秒杀产品,学会优先享受双十一福利
  6. Mysql日志与备份以及恢复
  7. HNUSTOJ-1621 Picking Cabbage(状态压缩DP)
  8. linux使用及shell常用命令技巧
  9. Java8增加功能--Effectively final 功能
  10. ORACLE / MYSQL----SQL语句大全