【HarmonyOS NEXT星河版开发实战】灯泡定时开关

news2024/9/24 3:21:03

个人主页→VON

收录专栏→鸿蒙综合案例开发​​​​​

代码及其图片资源会发布于gitee上面(已发布)

所有与鸿蒙开发有关的知识点都会在gitee上面进行发布

gitee地址icon-default.png?t=N7T8https://gitee.com/wang-xin-jie234

目录

 前言

界面功能介绍

界面构建思路

头部

 中间

底部

代码讲解

知识点概述

全套源代码


 前言

该案例是一个小型的娱乐项目,主要是定时器的应用。功能并不是很强大,只是简单图片的变化。有兴趣的小伙伴们可以根据界面效果自己进行实现。

界面功能介绍

头部有倒计时的数字,此案例是以三秒举例,当点击开关时开始计时,同时灯泡会变成红色,等倒计时结束后灯泡会重新变暗。 

界面构建思路

头部

 由于整体的UI界面较为简洁,所以就不做过多的赘述了。逻辑部分可以根据注释来慢慢琢磨,主要是对定时器组件的应用。

 中间

中间部分主要是通过条件语句对灯泡的颜色进行改变,灯泡初始时的颜色为灰色,当点击底部按钮的时候会变成红色,表示灯泡亮起时的颜色。 

底部

 

底部主要是通过一个按钮来控制灯泡的状态,当点击按钮的时候不仅灯泡的状态会改变,计时器也会启动来倒计时。 

代码讲解

定义组件

@Entry
@Component
struct Index {

 定义状态变量

// 初始灯泡状态,false表示灯泡关闭,true表示灯泡打开
@State isOpen: boolean = false
// 控制器,用于控制计时器
TimeController: TextTimerController = new TextTimerController()
// 点击按钮后记录下当前的时间,用于计算灯泡开启的时间
@State time: number = 0

 构建UI

build() {
  Column() {

 头部文字部分

// 头部文字部分,包含标题和计时器
Column({ space: 20 }) {
  // 标题文本
  Text('灯泡定时开关')
    .fontSize(30)
  // 计时器组件,设置为倒计时模式,倒计时时间为3000毫秒
  TextTimer({ isCountDown: true, count: 3000, controller: this.TimeController })
    .fontSize(30)
    .fontWeight(700)
    .format('mm:ss.SS') // 设置计时器显示格式
    .onTimer((utc: number) => {
      // 当计时器触发时,检查当前时间与记录时间的差值是否大于3000毫秒
      if (utc - this.time > 3000) {
        // 如果超过3000毫秒,关闭灯泡并重置计时器
        this.isOpen = false
        this.TimeController.reset()
      }
    })
}
.width('100%')
.justifyContent(FlexAlign.Center) // 使内容居中对齐
.margin({ top: 20 }) // 设置顶部外边距

 中部灯泡部分

// 中部灯泡部分,根据灯泡状态显示不同的图片
if (this.isOpen === false) {
  // 如果灯泡关闭,显示关闭状态的图片
  Image($r('app.media.bulboff'))
    .width('60%')
    .margin({ top: '40%' }) // 设置顶部外边距
} else {
  // 如果灯泡打开,显示打开状态的图片
  Image($r('app.media.bulbon'))
    .width('60%')
    .margin({ top: '40%' }) // 设置顶部外边距
}

  底部按钮部分

// 底部按钮部分,用于控制灯泡的开关
Button('开关')
  .margin({ top: '40%' }) // 设置顶部外边距
  .width('50%')
  .fontWeight(700)
  .fontSize(20)
  .onClick(() => {
    // 切换灯泡状态
    this.isOpen = !this.isOpen
    // 记录当前时间
    this.time = new Date().getTime()
    if (this.isOpen) {
      // 如果灯泡打开,启动计时器
      this.TimeController.start()
    } else {
      // 如果灯泡关闭,重置计时器
      this.TimeController.reset()
    }
  })
}
.width('100%')
.height('100%')

知识点概述

鸿蒙开发中的计时器组件,主要是通过TickTimer组件来实现的。鸿蒙操作系统(HarmonyOS)是华为推出的一款面向全场景的分布式操作系统,旨在通过一个统一的操作平台,实现智能设备间的无缝连接和协同工作。在鸿蒙系统中,为了实现计时器功能,开发者可以利用TickTimer组件。这个组件是Text组件的一个子类,它能够继承并使用Text组件的一系列属性,比如字体大小、颜色等。

鸿蒙开发的计时器组件TickTimer具有丰富的属性和方法。TickTimer组件拥有多个属性,如format和count_down。通过设置这些属性,开发者可以自定义计时器的显示格式以及计时的方向,即正计时或倒计时。此外,TickTimer还提供了开始、暂停、重置等方法,使得计时器的操作更加灵活多样。

TickTimer组件的应用非常广泛,它可以被用于各种需要计时的场景,如运动计时、烹饪计时、学习计时等。例如,在一个健身应用中,可以通过TickTimer组件来帮助用户记录每个运动动作的持续时间。在教育应用中,可以利用TickTimer来设定阅读或学习的时长,帮助使用者管理时间。此外,TickTimer还可以用于游戏开发中,比如计时挑战或解谜游戏中的倒计时环节。

全套源代码

@Entry
@Component
struct Index {
  // 初始灯泡状态,false表示灯泡关闭,true表示灯泡打开
  @State isOpen: boolean = false
  // 控制器,用于控制计时器
  TimeController: TextTimerController = new TextTimerController()
  // 点击按钮后记录下当前的时间,用于计算灯泡开启的时间
  @State time: number = 0

  build() {
    Column() {
      // 头部文字部分,包含标题和计时器
      Column({ space: 20 }) {
        // 标题文本
        Text('灯泡定时开关')
          .fontSize(30)
        // 计时器组件,设置为倒计时模式,倒计时时间为3000毫秒
        TextTimer({ isCountDown: true, count: 3000, controller: this.TimeController })
          .fontSize(30)
          .fontWeight(700)
          .format('mm:ss.SS') // 设置计时器显示格式
          .onTimer((utc: number) => {
            // 当计时器触发时,检查当前时间与记录时间的差值是否大于3000毫秒
            if (utc - this.time > 3000) {
              // 如果超过3000毫秒,关闭灯泡并重置计时器
              this.isOpen = false
              this.TimeController.reset()
            }
          })
      }
      .width('100%')
      .justifyContent(FlexAlign.Center) // 使内容居中对齐
      .margin({ top: 20 }) // 设置顶部外边距

      // 中部灯泡部分,根据灯泡状态显示不同的图片
      if (this.isOpen === false) {
        // 如果灯泡关闭,显示关闭状态的图片
        Image($r('app.media.bulboff'))
          .width('60%')
          .margin({ top: '40%' }) // 设置顶部外边距
      } else {
        // 如果灯泡打开,显示打开状态的图片
        Image($r('app.media.bulbon'))
          .width('60%')
          .margin({ top: '40%' }) // 设置顶部外边距
      }

      // 底部按钮部分,用于控制灯泡的开关
      Button('开关')
        .margin({ top: '40%' }) // 设置顶部外边距
        .width('50%')
        .fontWeight(700)
        .fontSize(20)
        .onClick(() => {
          // 切换灯泡状态
          this.isOpen = !this.isOpen
          // 记录当前时间
          this.time = new Date().getTime()
          if (this.isOpen) {
            // 如果灯泡打开,启动计时器
            this.TimeController.start()
          } else {
            // 如果灯泡关闭,重置计时器
            this.TimeController.reset()
          }
        })
    }
    .width('100%')
    .height('100%')
  }
}

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

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

相关文章

数据结构——二叉树经典OJ题

1.单值二叉树 单值二叉树:就是判断二叉树里的所有值是否都一样 bool isUnivalTree(struct TreeNode* root) {if(rootNULL)return true;//查找有没有左子树并且看左子树当前指向的值是否和根当前指向的值相等if(root -> left && root -> left -> v…

【三维室内数据集】ScanNet v2使用说明

【版权声明】本文为博主原创文章,未经博主允许严禁转载,我们会定期进行侵权检索。 参考书籍:《人工智能点云处理及深度学习算法》 本文为专栏《Python三维点云实战宝典》系列文章,专栏介绍地址“【python三维深度学习】python…

Python自动化:图片批量添加水印

前言 本文将讲述怎样通过Python自动化的方法,来对照片进行批量的加水印,从而能够有效地阻止他人的非法占有,提高工作的效率。 Python自动化:办公效率的革命 自动化解决方案 实现步骤 读取指定文件夹中的图片:打开…

YOLOv9改进策略【卷积层】| 利用MobileNetv4中的UIB、ExtraDW优化RepNCSPELAN4

一、本文介绍 本文记录的是利用ExtraDW优化YOLOv9中的RepNCSPELAN4,详细说明了优化原因,注意事项等。ExtraDW是MobileNetv4模型中提出的新模块,允许以低成本增加网络深度和感受野,具有ConvNext和IB的组合优势。可以在提高模型精度…

redis | 认识非关系型数据库Redis的哈希数据类型

Redis 非关 kv型 哈希通用命令python 操作hash应用场景 数据类型 数据类型丰富,字符串strings,散列hashes,列表lists,集合sets,有序集合sorted sets等等 哈希 定义 1、由field和关联的value组成的键值对 类似于python的键值对 2、field和value.是字符…

『功能项目』新输入系统【07】

我们打开上一篇06新输入系统项目, 本章要做的事情是摄像机跟随主角移动, 给主角增加一个Player标签方便主摄像机查找主角对象 在编辑场景调好角度,选择Main Camera对象按键盘Ctrl Shift F使运行场景与编辑场景相同 新建CameraCtrl脚本代码 …

秋招突击——8/16——字节广告业务——面经整理——二面挂

文章目录 引言一面面试内容基础知识一、Redis为什么进行AOF重写?二、AQS和Conditon的使用三、乐观锁和分布式锁有什么差异?频繁使用乐观锁行不行?四、Java的即时编译技术五、Java中的JVM调优是如何做的?六、Java中创建对象的流程&…

STM32——BKP备份寄存器RTC实时时钟

首先是理论知识Unix时间戳: 时间戳只显示秒,没有进位,永不进位的秒计数器,60秒就是60秒,100秒就是100秒,它可以和年月日/时分秒进行转换 优点:1、简化硬件电路(只需要考虑秒的容量…

C语言 猜数字游戏

目录 1. 随机数⽣成 1.1 rand 1.2 srand 1.3 time 1.4 设置随机数的范围 2. 猜数字游戏实现 游戏要求: 1. 电脑⾃动⽣成1~100的随机数 2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对&a…

运行微信小程序报错:Bad attr data-event-opts with message

问题 使用uniapp 编译,运行微信小程序环境时,报错 Bad attr data-event-opts with message。(这个错误报错原因很多,这里只解决一个) 原因 原因是:代码中有: :key"swiperList i"…

猫头虎分享:Python库 Pip 的简介、安装、用法详解入门教程

猫头虎分享:Python库 Pip 的简介、安装、用法详解入门教程 🎯 大家好!今天猫头虎带您一起探索Python世界中的一个基础工具——Pip。作为一名Python开发者,掌握Pip的使用不仅能帮助你更有效地管理项目中的依赖,还能让你…

【Java】Spring Boot使用 Email 传邮件 (上手图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 认识依赖4.2 发送邮件步骤4.2.1 先获取授权码4.2.1 邮件配置4.2.2 主体内容…

使用 jar-analyzer 和dbeaver 分析java

https://github.com/jar-analyzer/jar-analyzer 可以进行jar分析,包括method调用 分析完可以通过界面进行一些分析,如果复杂还可以用DbWeaver 打开数据库进行分析

Java SpringBoot+Vue实战教程:如何搭建高中素质评价档案系统?

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【通俗易懂】限流、降级、熔断有什么区别?

目录 一、限流 1.1 简介 1.2 限流算法 二、降级 2.1 简介 2.2 降级的方式 延迟服务 在粒度范围内关闭服务(片段降级或服务功能降级) 页面异步请求降级 写降级 读降级 2.3 降级的介入方式 自动开关降级 服务超时 失败次数 发生故障 限流…

Markdown 美化 Github 个人主页

注:本文参考这篇博客 http://t.csdnimg.cn/KXhSw 目录 1 效果展示2 创建仓库3 编写 Markdown3.1 动态波浪图3.2 打字机动图3.3 技术栈图标3.4 项目贡献统计3.5 连续贡献统计3.6 贡献统计图3.7 代码时长统计3.8 仓库代码占比 1 效果展示 先来看看效果: 动…

java整合DL645-2007与Dl645-1997

注意事项: 前导字节-一般在传输帧信息前,都要有0~4个FE不等,所以这里要注意,对于主站来说,直接发送4个FE作为前导字节即可。而从站回复,就不一定了,根据厂家不同而不同,有些没有FE的,也有4个FE的,所以对于接受程序,一定要慎重传输次序-所有的数据项都是先传低字节,…

【生日视频制作】云层直升机飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】

云层直升飞机生日视频制作教程AE模板修改文字特效软件生成器玩法素 怎么如何做的【生日视频制作】云层直升机飞机机身AE模板修改文字软件生成器教程特效素材【AE模板】 生日视频制作步骤: 安装AE软件下载AE模板把AE模板导入AE软件修改图片或文字渲染出视频

web后端(javaEE)开发——servlet

目录 一、web后端开发概述 二、web后端开发环境搭建 1.安装服务器软件 2.安装JDK 三、创建web后端项目 1.创建项目 2.修改设置 3.*在IDEA中集成Tomcat* 四、Servlet创建和应用 1.概述 2.Servlet程序创建与配置 3.分析Servlet程序结构 一、web后端开发概述 web开发&a…

Netty代码阅读

阅读Netty官方文档的时候,提到了Netty主要有三大核心,分别是buffer、channel、Event Model,接下来我们就从阅读Netty代码来理解这三大核心。 示例程序 先给出示例程序,方便自己也方便读者进行debug调试。 Server端代码 # Serv…