「Mac畅玩鸿蒙与硬件24」UI互动应用篇1 - 灯光控制小项目

本篇将带领你实现一个互动性十足的灯光控制小项目,用户可以通过点击按钮来控制灯光的开关。该项目将涉及状态管理、动态图片加载以及按钮交互,是学习鸿蒙应用开发的重要基础。

在这里插入图片描述


关键词
  • UI互动应用
  • 状态管理
  • 动态图片加载
  • 用户交互

一、功能说明

在这个灯光控制应用中,用户可以通过点击“开灯”或“关灯”按钮来切换灯光状态。应用会根据用户的操作动态显示不同的灯光图片。我们将使用动态路径加载图像,并结合按钮交互来完成这一功能。


二、所需组件
  • @Entry@Component 装饰器
  • ColumnRow 布局组件
  • Image 组件用于展示不同状态的图片
  • Button 组件用于用户交互
项目结构
  • 项目名称LightControlApp
  • 自定义组件名称LightPage
  • 代码文件LightPage.etsIndex.ets

三、代码实现
// LightPage.ets
@Component
export struct LightPage {
  @State isOn: boolean = false; // 控制灯光状态
  @State imageIndex: number = 1; // 控制加载图片的索引

  build() {
    Column({ space: 20 }) {
      // 动态加载图片,根据状态显示不同灯光图片
      Image(this.isOn ? $r(`app.media.light_on_${this.imageIndex + 1}`) : $r(`app.media.light_off`))
        .height(300)
        .width(300)
        .borderRadius(20);

      // 提供按钮交互
      Row({ space: 50 }) {
        Button('关灯')
          .onClick(() => {
            this.isOn = false; // 切换状态为关灯
            this.imageIndex = Math.floor(Math.random() * 6) + 1; // 随机更换图片索引
          });

        Button('开灯')
          .onClick(() => {
            this.isOn = true; // 切换状态为开灯
            this.imageIndex = Math.floor(Math.random() * 6) + 1; // 随机更换图片索引
          });
      }
    }
    .height('100%')
    .width('100%')
    .justifyContent(FlexAlign.Center); // 布局居中显示
  }
}
// Index.ets
import { LightPage } from './LightPage'

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

效果示例:点击“开灯”或“关灯”按钮时,页面会动态加载随机灯光图片,增强用户体验。
在这里插入图片描述


四、代码解读
  • Image()
    根据 isOn 状态选择加载“开灯”或“关灯”图片,通过 imageIndex 实现随机图片的选择。

  • Math.floor(Math.random() * 6) + 1
    生成 1 到 6 的随机整数,确保每次点击按钮时加载不同的图片,提升用户体验。

  • @State 修饰符
    用于管理组件内的状态,确保 UI 根据状态变化进行重新渲染。


五、相关知识点
  • 「Mac畅玩鸿蒙与硬件11」鸿蒙UI组件篇1 - Text 和 Button 组件详解
  • 「Mac畅玩鸿蒙与硬件12」鸿蒙UI组件篇2 - Image组件的使用

小结

本篇教程通过实现灯光控制小项目,让你深入理解了如何利用鸿蒙框架进行状态管理和实现动态图片加载。掌握了这些技巧后,你可以轻松地创建更多的互动性应用。


下一篇预告

在下一篇「UI互动应用篇2」中,我们将探讨如何实现一个计时器应用,学习更多的时间控制与动态 UI 更新的实现方法。


上一篇:「Mac畅玩鸿蒙与硬件23」鸿蒙UI组件篇13 - 自定义组件的创建与使用
下一篇:「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现

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

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

相关文章

vue+websocket实现即时聊天平台

目录 1 什么是websocket 2 实现步骤 2.1 导入依赖 2.2 编写代码 1 什么是websocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它主要用于在客户端和服务器之间建立持久的连接,允许实时数据交换。WebSocket 的设计目的是为了提高 Web 应用程序的…

本地跟单软件,精准跟随、实时同步 轻松实现自动跟单 MT4免费EA

指标名称:本地跟单软件 版本:MT4 ver. 2.01(EA) 我们经常在一些论坛或网站上看到一些朋友提供的观摩账户吧,可以看到别人的账户情况,遇到有实力的交易者,很是羡慕啊。 如果我们自己的账户可以…

基于stm32的智能电子称(开源)

功能演示 基于stm32的智能电子称 简介 这是最近别人让我帮他做的一个毕业设计,总体来说非常简单,半天都不需要就可以实现,我做完之后,打算开源在这里让大家进行学习,我们先看一下他的任务书吧: 主要内容与基本要求&am…

写过的试卷怎么打印出新的?

当您有一份已经完成的试卷,但又需要重新打印一份全新的试卷时,这似乎是一个令人头疼的问题。不用担心,这里为您介绍一种简便的方法——利用“扫描”或“试卷还原”的软件,通过拍照的方式,将试卷上的答案清除&#xff0…

【51单片机】串口通信原理 + 使用

学习使用的开发板:STC89C52RC/LE52RC 编程软件:Keil5 烧录软件:stc-isp 开发板实图: 文章目录 串口硬件电路UART串口相关寄存器 编码单片机通过串口发送数据电脑通过串口发送数据控制LED灯 串口 串口是一种应用十分广泛的通讯接…

动态规划 —— dp 问题-打家劫舍II

1.打家劫舍II 题目链接: 213. 打家劫舍 II - 力扣(LeetCode)https://leetcode.cn/problems/house-robber-ii/ 2. 题目解析 通过分类讨论,将环形问题转换为两个线性的“打家劫舍|” 当偷第一个位置的时候,rob1在&#…

开车去内蒙古旅游要做什么准备?

一、车辆选择与准备 车辆类型: 尽量选择越野车或SUV,这类车辆底盘高、通过性好,适合草原、沙漠等复杂地形。车辆检查: 出发前全面检查车辆,包括轮胎、刹车系统、发动机等,确保车辆状态良好。冬季出行需特别…

【题解】—— LeetCode一周小结44

🌟欢迎来到 我的博客 —— 探索技术的无限可能! 🌟博客的简介(文章目录) 【题解】—— 每日一道题目栏 上接:【题解】—— LeetCode一周小结43 28.冗余连接 II 题目链接:685. 冗余连接 II 在…

视频Qoe测量学习笔记(一)

目录 流媒体协议详解 RTSP:实时流式协议 RTCP:实时运输控制协议 RTP:实时运输协议 H.264 流媒体协议详解 RTSP:实时流式协议 由IETF MMusic小组开发,已成为互联网建议标准[RFC 2326]。RTSP本身并不传送数据&…

使用Spring Validation实现数据校验详解

目录 前言1. Spring Validation概述2. 配置Spring Validation2.1 引入依赖2.2 启用全局校验 3. 使用注解进行参数校验3.1 基本校验注解3.2 使用Pattern进行正则校验3.3 综合示例 4. 在控制器层应用校验4.1 方法参数校验4.2 自定义错误处理 5. 高级应用:自定义校验注…

解决阿里云三个月证书过期 免费SSL证书部署教程

相信有上线过自己的网站、小程序经验的同学深有体会,给服务加上 SSL 证书还挺麻烦的,尤其是没有运维经验的同学。本来最省事的方法是买个证书,但是一看价格,还是算了吧,动辄就是几万块一年。作为个人来说,这…

简单走近ChatGPT

目录 一、ChatGPT整体背景认知 (一)ChatGPT引起关注的原因 (二)与其他公司的竞争情况 二、NLP学习范式的发展 (一)规则和机器学习时期 (二)基于神经网络的监督学习时期 &…

恢复Ubuntu+Windows10双系统安装前状态及分区还原详细步骤

1、恢复到安装 Ubuntu 之前的状态,先看看系统属性 2、选择 运行 3、 输入 msinfo32 回车 4、注意查看 BIOS 模式这一栏,UEFI,这里我们以UEFI系统为例 5、下来就可以开始进行 Ubuntu 的移除操作了 6、从Windows打开网页搜索磁盘精灵&#xff0…

一文搞定 InternStudio 开发机的使用 | 书生大模型

文章目录 创建开发机使用 SSH 远程连接开发机使用密码进行 SSH 远程连接使用 VScode 进行 SSH 远程连接 端口映射核心目标开发机端口映射的工作方式使用 VScode 进行端口映射运行 hello_world.py 代码进行测试测试成功页面 参考文献 创建开发机 InternStudio控制台 这里先做测…

WindowsDocker安装到D盘,C盘太占用空间了。

Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…

关于我、重生到500年前凭借C语言改变世界科技vlog.15——深入理解指针(4)

文章目录 1.回调函数的介绍2. qsort使用实例2.1 qsort函数介绍2.2使用 qsort 函数排序整型数据2.3使用 qsort 排序结构数据 3. qsort的模拟实现希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 1.回调函数的介绍 回调函数就是一个通过函数指针调用…

内网项目,maven本地仓库离线打包,解决Cannot access central in offline mode?

背景&#xff1a; 内网项目打包&#xff0c;解决Cannot access central in offline mode? 1、修改maven配置文件&#xff1a; localRepository改为本地仓库位置 <localRepository>D:\WorkSpace\WorkSoft\maven-repository\iwhalecloud-repository\business</loca…

笔记整理—linux驱动开发部分(8)framebuffer类设备

framebuffer显示设备。 在应用层直接抽象位向DDR中存放图片。 在操作系统中&#xff0c;将上图分为两个部分&#xff1a;驱动应用。 使用复制的方法效率十分的低&#xff0c;所以有了内存映射方法实现图片的显示。 framebuffer帧&#xff08;铺满一个屏幕&#xff09;&#xff…

第三十章 章节练习商品列表组件封装

目录 一、需求说明 二、技术要点 三、完整代码 3.1. main.js 3.2. App.vue 3.3. MyTable.vue 3.4. MyTag.vue 一、需求说明 1. my-tag 标签组件封装 (1) 双击显示输入框&#xff0c;输入框获取焦点 (2) 失去焦点&#xff0c;隐藏输入框 (3) 回显标签信息 (4) 内…

EHOME视频平台EasyCVR萤石设备视频接入平台视频诊断技术可以识别哪些视频质量问题?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。萤石设备视频接入平台EasyCVR不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能&#xff0c;还支持多种主流标准协议&#xff0c;如GB28181、GB35114、RTSP/Onvif…