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

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

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

20241103_202852.gif


关键词
  • 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; // 定时器 ID

  build() {
   
    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')}`;
  }
}
AI 代码解读
// Index.ets
import {
    CountdownPage } from './CountdownPage'

@Entry
@Component
struct Index {
   
  build() {
   
    Column() {
   
      CountdownPage() // 调用自定义组件
    }
    .padding(20) // 设置页面内边距
  }
}
AI 代码解读

效果示例:用户输入时间后点击“开始”按钮,倒计时开始;点击“暂停”按钮暂停倒计时;点击“重置”按钮时倒计时恢复到初始设置的时间。
20241103_202852.gif


四、代码解读

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

五、相关知识点


小结

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


下一篇预告

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


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

下一篇: 「Mac畅玩鸿蒙与硬件27」UI互动应用篇4 - 猫与灯的互动应用


作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=282
來源:坚果派
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


目录
打赏
0
1
2
0
151
分享
相关文章
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
194 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
UI-TARS Desktop 是一款基于视觉语言模型的 GUI 代理应用,支持通过自然语言控制电脑操作,提供跨平台支持、实时反馈和精准的鼠标键盘控制。
1497 17
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
|
3月前
|
UED
「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
本篇教程将实现一个模拟火车票查询系统,通过输入条件筛选车次信息,并展示动态筛选结果,学习事件处理、状态管理和界面展示的综合开发技巧。
104 13
|
3月前
「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
本篇教程将实现一个打卡提醒小应用,通过用户输入时间进行提醒设置,并展示实时提醒状态,实现提醒设置和取消等功能。
87 10
【鸿蒙 HarmonyOS】UI 组件 ( 拖动条 Slider 组件 )
【鸿蒙 HarmonyOS】UI 组件 ( 拖动条 Slider 组件 )
450 0
【鸿蒙 HarmonyOS】UI 组件 ( 拖动条 Slider 组件 )
HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 二)
自定义布局 当Java UI框架提供的布局无法满足需求时,可以创建自定义布局,根据需求自定义布局规则
HarmonyOS学习路之开发篇—Java UI框架(自定义组件与布局 一)
HarmonyOS提供了一套复杂且强大的Java UI框架,其中Component提供内容显示,是界面中所有组件的基类。ComponentContainer作为容器容纳Component或ComponentContainer对象,并对它们进行布局。
HarmonyOS学习路之开发篇—Java UI框架(基础组件说明【三】)
接上一篇文章… 上两篇文章已经介绍了大部分的Java UI组件 ,因为时间关系把一个内容分为了三个部分,这是最后一篇组件的介绍。分别介绍ListContainer、ScrollView和WebView。
HarmonyOS学习路之开发篇—Java UI框架(基础组件说明【二】)
二、分类说明 ④Picker Picker提供了滑动选择器,允许用户从预定义范围中进行选择。 Picker的自有XML属性见下表:
HarmonyOS学习路之开发篇—— Java UI框架(基础组件说明【一】)
HarmonyOS的常用组件一般在resources/base/layout下的xml文件中声明,然后在AbilitySlice中通过super.setUIContent(ResourceTable.某layout布局的文件名)来加载布局。在AbilitySlice中通过super.findComponentById(ResourceTable.组件的id)获取组件,获取成功后就可以对该组件进行操作,如添加监听,设置内容等。当然也可以通过代码动态的使用控件。

物联网

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等