Android笔记【14】结合LaunchedEffect实现计时器功能。

一、问题

cy老师第五次作业

结合LaunchedEffect实现计时器功能。要求:动态计时,每秒修改时间,计时的时间格式为“00:00:00”(小时:分钟:秒)提交源代码的文本和运行截图。

二、结果

三、代码

package com.example.test02

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ExitToApp
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import kotlinx.coroutines.delay



@Preview
@Composable
fun MainScreen_04(){

    //函数作用域内
    val timer = remember{ mutableLongStateOf(0) }
    var runningState = remember{ mutableStateOf(true) }
    val timerState = rememberUpdatedState(newValue = timer)

    val formattedTime = formatTime(timerState.value.value)
    
    LaunchedEffect(Unit){
        while(runningState.value){
            delay(100)
            timerState.value.value +=1
//            if(timerState.value.value == 100)
//                runningState.value =false
        }
    }
    
    Box(modifier = Modifier.fillMaxSize(),
        contentAlignment = Alignment.Center){
        Column(modifier = Modifier.fillMaxWidth(),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center){
//            LinearProgressIndicator(
//                progress = { timer.value.toFloat()/100 },
//                modifier = Modifier.size(800.dp,10.dp),
//                color = Color.Green,
//                trackColor = Color.LightGray,
//            )
            Text(text = "计时器",fontSize=30.sp,color= MaterialTheme.colorScheme.primary)
            Text(text = "${timerState.value.value}秒",fontSize = 24.sp)
//            TimerDisplay(timerState.value)
            Row(modifier = Modifier.fillMaxWidth(),
                horizontalArrangement = Arrangement.Center){

                IconButton(modifier =  Modifier.width(100.dp),

                    onClick={

                        runningState.value = true

                        timer.value = 0

                    }){

                    Row{

                        Icon(imageVector = Icons.Filled.PlayArrow,tint = Color.Green,contentDescription = null)

                        Text("计时")

                    }

                }

                IconButton(modifier = Modifier.width(100.dp),

                    onClick={

                        runningState.value  = false

                        timer.value +=1

                    }){

                    Row{

                        Icon(imageVector = Icons.AutoMirrored.Filled.ExitToApp,

                            tint = Color.Green,contentDescription = null)

                        Text("停止")

                    }

                }

            }

        }

    }

}


@Composable
fun TimerDisplay(timerState: MutableState<Long>) {
    val formattedTime = formatTime(timerState.value)
    Text(text = formattedTime,
        color = Color.Red, // 字体颜色为红色
        fontSize = 24.sp, // 字体大小
    )

}

private fun formatTime(seconds: Long): String {
    return String.format(" %02d:%02d:%02d",seconds/3600, seconds / 60, seconds % 60)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/934447.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【强化学习入门笔记】 2.1 值迭代

本系列为学习赵世钰老师的《强化学习的数学原理》所作的学习笔记. 本节我们将介绍强化学习中的值迭代求解方法. 2.1.1 算法步骤 在1.5节我们介绍了通过迭代可以求贝尔曼最优公式的最优解, 这个方法就叫值迭代: v k 1 max ⁡ π ∈ Π ( r π γ P π v k ) , k 0 , 1 , …

汽车车牌标记支持YOLO,COCO,VOC三种格式标记,4000张图片的数据集

本数据集支持YOLO&#xff0c;COCO&#xff0c;VOC三种格式标记汽车车牌&#xff0c;无论是新能源汽车还是油车都能识别标记&#xff0c;该数据集一共包含4000张图片 数据集分割 4000总图像数 训练组 70&#xff05; 2800图片 有效集 20&#xff05; 800图片 测…

python基础:(八)文件

目录 一.从文件中读取数据1.1读取整个文件1.2文件路劲1.3逐行读取 二.写入文件 一.从文件中读取数据 各位小伙伴&#xff0c;文件这一块得好好学&#xff0c;多看多敲代码&#xff0c;以后处理数据&#xff0c;写爬虫少不了这个&#xff0c;先从基础&#xff08;简单的&#x…

输电线路故障测距研究

故障分析法容易受到过渡电阻、故障类型等因素的影响&#xff0c;从而造成测距误差较大。 行波法不受电力系统运行方式的影响&#xff0c;得到了广泛的应用。波头信息的提取方法主要有&#xff1a;小波变换、希尔伯特黄变换、TT变换等。 智能测距法逐渐被应用于输电线路故障测…

FPGA实战篇(IP核之MMCM/PLL实验)

1.MMCM/PLL IP 核简介 锁相环作为一种反馈控制电路&#xff0c;其特点是利用外部输入的参考信号控制环路内部震荡信号的频率和相位。因为锁相环可以实现输出信号频率对输入信号频率的自动跟踪&#xff0c;所以锁相环通常用于闭环跟踪电路。 锁相环在工作的过程中&#xff0c;当…

wordpress网站安装了Linux宝塔面板,限制IP地址访问网站,只能使用域名访问网站

一、Linux服务器安装Linux宝塔面板 这个步骤参考网上其他教程。 二、Linux宝塔面板部署wordpress网站 这个步骤参考网上其他教程&#xff0c;保证网站能够正常访问&#xff0c;并且使用Linux宝塔面板申请并部署了SSL证书&#xff0c;使用https协议默认443端口正常访问。 三…

顶顶通电话机器人开发接口对接大语言模型之实时流TTS对接介绍

大语言模型一般都是流式返回文字&#xff0c;如果等全部文字返回了一次性去TTS&#xff0c;那么延迟会非常严重&#xff0c;常用的方法就是通过标点符号断句&#xff0c;返回了一句话就提交给TTS。随着流TTS的出现&#xff0c;就可以直接把大模型返回的文字灌给流TTS&#xff0…

leetcode每日一题(20241210)

leetcode每日一题&#xff08;20241210&#xff09;今天依旧是棋盘类型的题目&#xff0c;但是今天的只是表面相关&#xff0c;看题&#xff1a; 935.骑士拨号器 题目描述&#xff1a; 象棋骑士有一个独特的移动方式&#xff0c;它可以垂直移动两个方格&#xff0c;水平移动一…

记录ubuntu22.04重启以后无法获取IP地址的问题处理方案

现象描述&#xff1a;我的虚拟机网络设置为桥接模式&#xff0c;输入ifconfig只显示127.0.0.1&#xff0c;不能连上外网。&#xff0c;且无法上网&#xff0c;用ifconfig只有如下显示&#xff1a; 1、sudo -i切换为root用户 2、输入dhclient -v 再输入ifconfig就可以看到多了…

MVC基础——市场管理系统(一)

文章目录 项目地址一、创建项目结构1.1 创建程序以及Controller1.2 创建View1.3 创建Models层,并且在Edit页面显示1.4 创建Layou模板页面1.5 创建静态文件css中间件二、Categories的CRUD2.1 使用静态仓库存储数据2.2 将Categorie的列表显示在页面中(List)2.3 创建_ViewImport.…

strncpy在复制含有多个\0的字符串时遇到的问题

strncpy在复制含有多个\0的字符串的时候&#xff0c;会产生截断&#xff0c;因为strncpy在读取源字符串的时候&#xff0c;遇到了\0&#xff0c;函数会认为该字符串已经结束了&#xff0c;然后会向目标字符串内填充\0。 char buffer[100] "ak\0jl";for (int i 0; i…

C# 网络编程--基础核心内容

在现今软件开发中&#xff0c;网络编程是非常重要的一部分&#xff0c;本文简要介绍下网络编程的概念和实践。 C#网络编程的主要内容包括以下几个方面‌&#xff1a; : 上图引用大佬的图&#xff0c;大家也关注一下&#xff0c;有技术有品质&#xff0c;有国有家&#xff0c;情…

驱动---1.DAC8552实现三角波输出

最近开始进行新项目的研发&#xff0c;考虑用DAC做一个前级输出&#xff0c;选择了DAC8552这个器件的一个模块&#xff0c;用了野火的指南者做主控&#xff0c;芯片是STM32F103VET6&#xff0c;主频是72MHz。 一、器件手册重要信息提取 1.DAC8552具有十六位的分辨率、双通道输…

Elasticsearch入门之HTTP基础操作

RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是&#xff0c;客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每个请求都必须包含理解请求所必需的信息。如果服务器在…

计算机启动过程 | Linux 启动流程

注&#xff1a;本文为“计算机启动、 Linux 启动”相关文章合辑。 替换引文部分不清晰的图。 探索计算机的启动过程 Aleksandr Goncharov 2023/04/21 很多人对计算机的启动方式很感兴趣。只要设备开启&#xff0c;这就是魔法开始和持续的地方。在本文中&#xff0c;我们将概…

【数据分享】1901-2023年我国省市县三级逐年最低气温数据(Shp/Excel格式)

之前我们分享过1901-2023年1km分辨率逐月最低气温栅格数据和Excel和Shp格式的省市县三级逐月最低气温数据&#xff0c;原始的逐月最低气温栅格数据来源于彭守璋学者在国家青藏高原科学数据中心平台上分享的数据&#xff01;基于逐月栅格数据我们采用求年平均值的方法得到逐年最…

Hash、HASHTABLE底层原理【Redis对象篇】

&#x1f3c6; 作者简介&#xff1a;席万里 ⚡ 个人网站&#xff1a;https://dahua.bloggo.chat/ ✍️ 一名后端开发小趴菜&#xff0c;同时略懂Vue与React前端技术&#xff0c;也了解一点微信小程序开发。 &#x1f37b; 对计算机充满兴趣&#xff0c;愿意并且希望学习更多的技…

YOLOv11改进,YOLOv11添加GSConv卷积+Slim-neck,助力小目标检测,二次创新C3k2结构

实时目标检测在工业和研究领域中具有重要意义。在边缘设备上,巨大的模型难以满足实时检测的要求,而由大量深度可分离卷积(depth-wise separable convolution)构建的轻量级模型又无法达到足够的精度。作者引入了一种新的轻量级卷积技术——GSConv,以减轻模型重量同时保持精…

利用Java爬虫MinC根据ID获取商品详情的完整指南

在当今数字化时代&#xff0c;获取商品详情数据对于市场分析、价格监控和竞争对手分析至关重要。Java作为一种强大且广泛使用的编程语言&#xff0c;非常适合开发复杂的爬虫系统。本文将详细介绍如何利用Java编写爬虫程序来根据商品ID获取商品详情&#xff0c;并提供完整的代码…

IP地址中的网络号:定义、作用与重要性

在计算机网络中&#xff0c;IP地址是每台设备的唯一标识。它由网络号和主机号两部分组成&#xff0c;其中网络号用于标识一个特定的网络&#xff0c;而主机号则用于区分该网络内的不同设备。网络号的正确分配和管理&#xff0c;是IP网络互联互通的基础。本文将带您走进网络号的…