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

[复制链接]
发表于 2025-12-30 23:00:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本篇将领导你实现一个意见意义十足的互动应用,用户点击按钮时猫会在一排灯之间移动,猫所在的位置灯会亮起(on),别的灯会熄灭(off)。应用会根据用户的使用动态更新灯光状态和文本提示当前亮灯的位置,是把握状态管理和组件动态渲染的精良实践。


关键词



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

一、功能阐明

在这个猫与灯的互动应用中,用户点击按钮后,猫会在一排灯光中移动,猫所处位置的灯会亮起(on),别的灯则关闭(off)。文本会提示当前亮着的灯位置,以加强互动效果。

二、所需组件



  • @Entry 和 @Component 装饰器
  • Column 和 Row 结构组件
  • Image 组件用于展示灯和猫的图片
  • Button 组件用于用户交互
  • ForEach 循环用于动态渲染灯和猫的位置
项目结构



  • 项目名称:CatAndLampApp
  • 自界说组件名称:CatAndLampPage
  • 代码文件:CatAndLampPage.ets、Index.ets

三、代码实现

  1. // CatAndLampPage.ets
  2. @Component
  3. export struct CatAndLampPage {
  4.   @State currentLampIndex: number = 0; // 当前猫所在的灯位置
  5.   lamps: number[] = [1, 2, 3, 4, 5, 6]; // 灯的索引
  6.   build() {
  7.     Column({ space: 20 }) {
  8.       // 显示当前亮灯的提示文本
  9.       Row() {
  10.         Text(`当前亮着的灯是: 灯${this.currentLampIndex + 1}`)
  11.           .fontSize(25)
  12.           .fontWeight(FontWeight.Bold)
  13.           .fontColor(Color.Blue);
  14.       }
  15.       // 渲染灯和猫的位置
  16.       Row({ space: 10 }) {
  17.         ForEach(this.lamps, (index: number) => {
  18.           Column() {
  19.             // 如果当前灯是猫所在的位置,显示亮灯和猫
  20.             if (this.currentLampIndex === index - 1) {
  21.               Image($r(`app.media.light_on_${index}`))
  22.                 .width(130)
  23.                 .height(150)
  24.                 .borderRadius(10); // 增加灯的圆角效果
  25.               Image($r('app.media.cat'))
  26.                 .width(85)
  27.                 .height(100)
  28.                 .borderRadius(5); // 增加猫的圆角效果
  29.             } else {
  30.               // 其他位置显示关灯
  31.               Image($r(`app.media.light_off_${index}`))
  32.                 .width(130)
  33.                 .height(150)
  34.                 .borderRadius(10)
  35.                 .margin(20)
  36.             }
  37.           }
  38.         });
  39.       }
  40.       // 控制猫移动的按钮
  41.       Row({ space: 20 }) {
  42.         Button('下一步')
  43.           .onClick(() => {
  44.             this.moveCatToNextLamp();
  45.           })
  46.           .fontSize(20)
  47.           .backgroundColor(Color.Green)
  48.           .fontColor(Color.White);
  49.       }
  50.       .justifyContent(FlexAlign.Center);
  51.     }
  52.     .padding(20)
  53.     .height('100%')
  54.     .width('100%')
  55.     .alignItems(HorizontalAlign.Center);
  56.   }
  57.   private moveCatToNextLamp() {
  58.     // 更新当前猫的位置
  59.     this.currentLampIndex = (this.currentLampIndex + 1) % this.lamps.length;
  60.   }
  61. }
复制代码
  1. // Index.ets
  2. import { CatAndLampPage } from './CatAndLampPage'
  3. @Entry
  4. @Component
  5. struct Index {
  6.   build() {
  7.     Column() {
  8.       CatAndLampPage() // 调用自定义组件
  9.     }
  10.     .padding(20) // 设置页面内边距
  11.   }
  12. }
复制代码
  效果示例:用户点击“下一步”按钮时,猫会移动到下一个灯的位置,当前灯亮起并表现猫,其他灯熄灭,文本提示当前亮着的灯。

  
四、代码解读



  • ForEach():
    使用 ForEach() 循环渲染灯和猫的图片,实现动态结构。
  • @State currentLampIndex:
    用于管理猫当前所在灯的位置,包管 UI 在状态厘革时自动更新。
  • Image():
    根据 currentLampIndex 决定是否表现亮灯、关灯或猫的位置,实现动态图片切换。

五、优化发起


  • 增长动画:可以为猫的移动添加过渡动画,让交互更加流通。
  • 灯光颜色厘革:在亮灯状态下,添加渐变色效果或光晕效果,增长视觉吸引力。
  • 音效提示:在猫移动时添加音效,提升用户体验。
  • 可控移动按钮:增长“上一盏灯”的按钮,使用户可以或许控制猫前后移动。

六、干系知识点



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

小结

本篇教程通过实现“猫与灯的互动应用”,你学会了怎样使用状态管理、动态渲染组件以及用户交互的根本本事。这些知识可以应用到更复杂的互动应用开发中。

下一篇预报

在下一篇「UI互动应用篇5 - 滑动选择器实现」中,我们将学习怎样实现滑动选择器,资助用户通过滑动条举行选择并实时表现效果。

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

下一篇: 「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现


作者:SoraLuna
链接:https://www.nutpi.net/thread?topicId=283
來源:坚果派
著作权归作者全部。商业转载请接洽作者得到授权,非商业转载请注明出处。

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表