「Mac畅玩鸿蒙与硬件26」UI互动应用篇3 - 倒计时和提醒功能实现

本篇将带领你实现一个倒计时和提醒功能的应用,用户可以设置倒计时时间并开始计时。当倒计时结束时,应用会显示提醒。该项目涉及时间控制、状态管理和用户交互,是学习鸿蒙应用开发的绝佳实践项目。

在这里插入图片描述


关键词
  • UI互动应用
  • 倒计时器
  • 状态管理
  • 用户交互

一、功能说明

在这个倒计时应用中,用户可以设置倒计时的初始时间,点击按钮启动倒计时,并在倒计时结束时收到提醒。用户还可以暂停和重置倒计时,并恢复到初始设置的时间。


二、所需组件
  • @Entry@Component 装饰器
  • Text 组件用于显示倒计时
  • Button 组件用于用户交互
  • TextInput 组件用于用户输入倒计时初始时间
  • setIntervalclearInterval 方法用于时间控制
项目结构
  • 项目名称CountdownApp
  • 自定义组件名称CountdownPage
  • 代码文件CountdownPage.etsIndex.ets

三、代码实现
// CountdownPage.ets
@Component
export struct CountdownPage {@State timeLeft: number = 0; // 剩余时间@State initialTime: number = 0; // 初始时间@State isRunning: boolean = false; // 倒计时状态private intervalId: number | null = null; // 定时器 IDbuild() {Column({ space: 20 }) {Row() {Text("倒计时:").fontSize(25).fontWeight(FontWeight.Bold);Text(this.formatTime(this.timeLeft)).fontSize(25).fontColor(Color.Red);}// 输入初始时间TextInput({ placeholder: "设置倒计时时间(秒)" }).type(InputType.Number).onChange((value: string) => {if (!this.isRunning) {this.initialTime = parseInt(value) || 0;this.timeLeft = this.initialTime; // 更新剩余时间}});// 按钮交互行Row({ space: 20 }) {Button(this.isRunning ? '暂停' : '开始').onClick(() => {if (this.isRunning) {this.stopCountdown();} else {this.startCountdown();}});Button('重置').onClick(() => {this.resetCountdown();});}.justifyContent(FlexAlign.Center);// 提示倒计时结束if (this.timeLeft === 0 && this.isRunning) {Text("时间到!").fontSize(30).fontColor(Color.Green).fontWeight(FontWeight.Bold);}}.padding(20).height('100%').width('100%').alignItems(HorizontalAlign.Center);}private startCountdown() {if (this.timeLeft > 0) {this.isRunning = true;this.intervalId = setInterval(() => {if (this.timeLeft > 1) {this.timeLeft -= 1;} else {this.stopCountdown();}}, 1000);}}private stopCountdown() {this.isRunning = false;if (this.intervalId !== null) {clearInterval(this.intervalId);this.intervalId = null;}}private resetCountdown() {this.stopCountdown();this.timeLeft = this.initialTime; // 将倒计时重置为初始时间}private formatTime(time: number): string {return `${Math.floor(time / 60).toString().padStart(2, '0')}:${(time % 60).toString().padStart(2, '0')}`;}
}
// Index.ets
import { CountdownPage } from './CountdownPage'@Entry
@Component
struct Index {build() {Column() {CountdownPage() // 调用自定义组件}.padding(20) // 设置页面内边距}
}

效果示例:用户输入时间后点击“开始”按钮,倒计时开始;点击“暂停”按钮暂停倒计时;点击“重置”按钮时倒计时恢复到初始设置的时间。
在这里插入图片描述


四、代码解读
  • TextInput()
    用于用户输入倒计时的初始时间。输入值会同时更新 initialTimetimeLeft
  • setInterval()clearInterval()
    setInterval() 用于每秒更新 timeLeft,实现倒计时;clearInterval() 用于暂停或重置倒计时。
  • resetCountdown()
    timeLeft 重置为 initialTime,确保倒计时恢复到用户设置的初始值。

五、相关知识点
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
  • 「Mac畅玩鸿蒙与硬件13」鸿蒙UI组件篇3 - TextInput 组件获取用户输入

小结

本篇教程通过实现倒计时和提醒功能,展示了如何在鸿蒙中使用状态管理和时间控制来实现动态更新和用户交互。掌握这些技能后,你将能够更灵活地开发时间管理相关的应用。


下一篇预告

在下一篇「UI互动应用篇4 - 猫与灯的互动应用」中,我们将探索一个有趣的项目,展示如何结合状态和动态图片实现更丰富的用户互动体验。


上一篇: 「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现
下一篇:「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

重装系统后,把Anaconda从硬盘恢复方法(亲测可用)

1.首先保证安装目录文件完整 2.添加系统环境变量 E:\anaconda E:\anaconda\Scripts E:\anaconda\Library\bin E:\anaconda\Library\mingw-w643然后进入安装目录打开cmd命令窗口,输入一下如下命令 python .\Lib\_nsis.py mkmenus4.如果需要cuda恢复,只…

Linux动态库和静态库

1,手动制作静态库 1,如何形成静态库文件 做库时,头文件(.h)必须暴露,源文件(.c)必须隐藏。 操作:将需要形成库的文件编译成.o文件: 然后用指令:ar -rc libmy_stdio.a my_stdio.o my_string.o…

java基础之 String\StringBuffer\ StringBuilder

文章目录 String字符串的创建为什么说String是不可变的?创建后的字符串存储在哪里?字符串的拼接String类的常用方法 StringBuilder & StringBuffer使用方法验证StringBuffer和StringBuilder的线程安全问题 总结三者区别什么情况下用运算符进行字符串…

【计网不挂科】计算机网络期末考试中常见【选择题&填空题&判断题&简述题】题库(3)

前言 大家好吖,欢迎来到 YY 滴计算机网络 系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 本博客主要内容,收纳了一部门基本的计算机网络题目,供yy应对期中考试复习。大家可以参考 欢迎订阅 YY滴其他专栏!…

告别繁琐统计,一键掌握微信数据

微信数据管理的挑战在数字时代,微信已成为我们日常沟通和商业活动的重要工具。然而,随着微信号数量的增加,手动统计每个账号的数据变得越来越繁琐。从好友数量到会话记录,再到转账和红包,每一项都需要耗费大量的时间和…

Oracle分区技术特性

Oracle 的分区是一种“分而治之”的技术,通过将大表、索引分成可以独立管理的、小的 Segment,从而避免了对每个对象作为一个大的、单独的 Segment 进行管理,为海量数据访问提供了可伸缩的性能。自从 Oracle 引入分区技术以来,Orac…

ArkTS常用数据处理:掌握核心技能与实践

在HarmonyOS应用开发中,ArkTS作为主要的开发语言,其数据处理能力是构建高效应用的关键。本文将详细介绍ArkTS中的常用数据处理方法,包括基本数据类型、数组、枚举、对象和XML解析与生成等,以及它们在实际开发中的应用和最佳实践。…

bert-base-chinese模型使用教程

向量编码和向量相似度展示 import torch from transformers import BertTokenizer, BertModel import numpy as npmodel_name "C:/Users/Administrator.DESKTOP-TPJL4TC/.cache/modelscope/hub/tiansz/bert-base-chinese"sentences [春眠不觉晓, 大梦谁先觉, 浓睡…

HTML+CSS科技感时钟(附源码!!!)

预览效果 源码(直接复制使用) <!DOCTYPE html> <html lang"zh-Hans"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>科技感时钟</…

Docker配置国内源加速

Docker配置国内源加速 添加配置文件/etc/docker/daemon.json, 内容如下&#xff1a; {"registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"] }本人使用的是阿里云服务器&#xff0c;所以配了个阿里云的 使配置生效 systemctl daemon-reload …

论文精读系列

​ ViT (Vision Transformer) 『论文精读』Vision Transformer(VIT)论文解读 ​

深入理解 ZooKeeper:分布式协调服务的核心与应用

一、引言 随着互联网技术的飞速发展&#xff0c;分布式系统的规模和复杂性不断增加。在分布式环境中&#xff0c;各个节点之间需要进行高效的协调和通信&#xff0c;以确保系统的正常运行。ZooKeeper 正是为了解决分布式系统中的协调问题而诞生的一款开源软件。它提供了一种简单…

PyQt5实战——UTF-8编码器功能的实现(六)

个人博客&#xff1a;苏三有春的博客 系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序…

‌MySQL中‌between and的基本用法‌

文章目录 一、between and语法二、使用示例2.1、between and数值查询2.2、between and时间范围查询2.3、not between and示例 BETWEEN AND操作符可以用于数值、日期等类型的字段&#xff0c;包括边界值。 一、between and语法 MySQL中的BETWEEN AND操作符用于在两个值之间选择…

微服务系列一:基础拆分实践

目录 前言 一、认识微服务 1.1 单体架构 VS 微服务架构 1.2 微服务的集大成者&#xff1a;SpringCloud 1.3 微服务拆分原则 1.4 微服务拆分方式 二、微服务拆分入门步骤 &#xff1a;以拆分商品模块为例 三、服务注册订阅与远程调用&#xff1a;以拆分购物车为例 3.1 …

Spring的常用注解之@Component——day1

1、Component Component&#xff1a;泛指各种组件&#xff1b;它允许 Spring 自动检测自定义 Bean。换句话说&#xff0c;无需编写任何明确的代码&#xff0c;Spring 就能做到&#xff1a; 扫描应用&#xff0c;查找注解为 Component 的类将它们实例化&#xff0c;并注入任何…

jvm学习笔记-轻量级锁内存模型

一&#xff0c;轻量级锁 LockRecord的那个第一个成员变量是拷贝对应锁定了的java对象资源的MarkWord&#xff0c;Lock Record有一个Ptr指针刚开始指向自己&#xff0c;后面这个指针存储在锁定资源的java对象的markword中&#xff0c;后续可以通过java对象的MarkWord快速定位到…

C++在游戏领域的主要应用

1、C简介 C是一种通用的程序设计语言&#xff0c;其设计就是为了使认真的程序员工作得更愉快。除了一些小细节之外&#xff0c;C是C程序设计语言的一个超集。C提供了C所提供的各种功能还为定义新类型提供了灵活而有效的功能。程序员可以通过定义新类型&#xff0c;使这些类型与…

什么是制造项目管理?

制造项目管理是指在制造行业中管理和协调各类项目活动的过程&#xff0c;以实现产品的有效生产。这类项目通常涉及复杂的资源配置、流程优化、成本控制和质量管理&#xff0c;旨在确保产品按时、按质地完成&#xff0c;并满足市场需求。制造项目在现代工业中非常常见&#xff0…

【力扣专题栏】面试题 01.02. 判定是否互为字符重排,如何利用数组模拟哈希表解决两字符串互排问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写(1)、两个数组分别模拟哈希表解决(2)、利用一个数组模拟哈希表解决问题 1、题目描述解释 2、算法原理解析 3、代码编写 (1)、两个数组分别模拟哈希表解决 class Solution { public:bool CheckPermutation(string s1, stri…