Jetpack Compose - CircularProgressIndicator、LinearProgressIndicator
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相关推荐
- Jetpack Compose - Row、Column
Jetpack Compose - Row.Column 0.介绍 1.属性一览 2.使用示例 3.版本更新 4.未解决问题 Compose系列文章,请点原文阅读.原文,是时候学习Compose了! ...
- Jetpack Compose——remember、mutableStateOf、rememberSaveable
1,mutableStateOf:标识这个data是有状态的,如果状态发生了改变,所有引用这个状态的View都需要重新绘制 2,remember:存储值,当界面重新绘制,会读取之前的值,相当于在mut ...
- Jetpack Compose中的手势操作
点击事件 监听点击事件非常简单,使用 clickable 和 combinedClickable 修饰符即可满足需求: @OptIn(ExperimentalFoundationApi::class) ...
- Jetpack Compose 实战 宝可梦图鉴
文章目录 前言 实现效果 一.架构介绍 二.一些的功能点的介绍 加载图片并获取主色,再讲主色设置为背景 一个进度缓慢增加的圆形进度条 单Activity使用navigation跳转Compose可组合 ...
- Jetpack Compose中的Accompanist
accompanist是Jetpack Compose官方提供的一个辅助工具库,以提供那些在Jetpack Compose sdk中目前还没有的功能API. 权限 依赖配置: repositories ...
- 随输入动态改变ui_深入详解 Jetpack Compose | 优化 UI 构建
人们对于 UI 开发的预期已经不同往昔.现如今,为了满足用户的需求,我们构建的应用必须包含完善的用户界面,其中必然包括动画 (animation) 和动效 (motion),这些诉求在 UI 工具包创 ...
- 移动开发 Jetpack Compose 组件布局
Jetpack Compose 是用于构建原生 Android 界面的新工具包.它可简化并加快 Android 上的界面开发,使用更少的代码.强大的工具和直观的 Kotlin API,快速让应用生动而 ...
- 在 Jetpack Compose 中安全地使用数据流
/ 今日科技快讯 / 11月17日下午,暴雪中国官方微博发布公告称,各位暴雪游戏的国服玩家,我们很遗憾地通知大家,随着我们与网之易公司现有授权协议的到期,自2023年1月24日0点起,所有&l ...
- Jetpack Compose 自定义绘制——高仿Keep周运动数据页面
废话之前先上图吧,如果不是有人告诉,你可以一眼看出哪个是真哪个是假吗? 仿制整个页面(仅仅页面)大概花了我两个小时,不过仅仅是静态的.不可点击的.图有形似而无功能. 自定义绘制 Jetpack Com ...
- 使用Jetpack Compose竟能做出如此漂亮的倒计时APP
Compose开发者挑战赛二周目 迎合Jetpack Compose beta版的发布,Google官方发起了Compose开发者挑战赛活动,目前已经入二周目 android-dev-challeng ...
最新文章
- linux监控平台搭建-内存
- 数据结构和算法,到底有多重要?
- Android edittext 属性inputtype详解
- 分布式系统中处理参数配置的 4 种方案
- 有关Java中json字符串与map的转换使用
- oracle行级的触发器,Oracle触发器Trigger2行级
- 《JavaScript高级程序设计》第8-9章
- 【Daily Scrum】11-26
- yum 安装mysql数据库
- css3 object-fit详解
- 为GitHub项目加入Travis-CI的自动集成
- from xx is not a valid DFS filename
- 用ostringstream与istringstream转化字符串
- Atitit 2017年的技术趋势与未来的大技术趋势 1. 2017年的技术趋势	2 1.1. Web not native	2 1.2. 更加移动优先 ,,more spa	3 1.3. Ar
- 优秀 java工程师 简历
- 关于SMC的源式,汇式(漏式)。PNP和NPN的说明与区别
- W806+ST7735R+tftLCD程序开发
- 安防摄像头RTSP/Onvif协议网页无插件直播视频流媒体服务器EasyNVR之按需直播如何有效利用最大上行带宽
- 两轮电自2.0时代开启 小牛电动以独立主见创造新物种
- 温度报警器 c语言,红外遥控温度报警器