「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果

简介: 本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。

本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。

20241202_222649.gif


关键词
  • UI互动应用
  • 闪烁动画
  • 动态按钮
  • 状态管理
  • 用户交互

一、功能说明

闪烁按钮效果应用实现了一个动态交互功能,主要包括以下特点:

  1. 按钮的颜色会以一定频率变化,形成闪烁效果。
  2. 用户点击按钮后,可以触发停止或恢复闪烁的操作。
  3. 支持多种颜色的按钮闪烁自定义。

二、所需组件

  • @Entry@Component 装饰器
  • Column 布局组件
  • Button 组件用于用户交互
  • @State 修饰符用于状态管理
  • 定时器 setIntervalclearInterval 用于控制动态更新

三、项目结构

  • 项目名称BlinkingButtonApp
  • 自定义组件名称BlinkingButtonPage
  • 代码文件BlinkingButtonPage.etsIndex.ets

四、代码实现

// 文件名:BlinkingButtonPage.ets

@Component
export struct BlinkingButtonPage {
   
  @State isBlinking: boolean = false; // 按钮闪烁状态
  @State currentColor: string = '#FF5733'; // 当前按钮颜色
  private colors: string[] = [
    "#FFDBDB", "#E1D3FF", "#D7C5FF", "#B3EFD4", "#99E6C1",
    "#FFF6B3", "#FFF399", "#BCCFFF", "#A7BDFF", "#FFE1B3",
    "#FFD699", "#F9BDFF", "#F7A8FF"
  ]; // 闪烁颜色列表
  private intervalId: number | null = null; // 定时器ID

  build() {
   
    Column({
    space: 20 }) {
   
      // 显示按钮状态,动态绑定isBlinking状态
      Text(`按钮状态: ${
     this.isBlinking ? '闪烁中' : '已停止'}`)
        .fontSize(20)
        .alignSelf(ItemAlign.Center);

      // 闪烁按钮
      Button('闪烁按钮')
        .backgroundColor(this.currentColor)
        .fontColor(Color.White)
        .fontSize(18)
        .onClick(() => this.toggleBlinking())
        .width('60%')
        .alignSelf(ItemAlign.Center);

      // 恢复闪烁按钮
      Button('恢复默认颜色')
        .onClick(() => this.resetColor())
        .fontSize(18)
        .backgroundColor(Color.Gray)
        .fontColor(Color.White)
        .width('60%')
        .alignSelf(ItemAlign.Center);

      // 添加猫咪图片装饰
      Image($r('app.media.cat'))
        .width(150)
        .height(176)
        .alignSelf(ItemAlign.Center);
    }
    .padding(20)
    .width('100%')
    .height('100%')
    .backgroundColor('#F0F0F0')
    .onAppear(() => this.startBlinking());
  }

  // 开始按钮闪烁
  private startBlinking() {
   
    if (!this.isBlinking || this.intervalId !== null) {
   
      return; // 如果已经在闪烁或者定时器存在,则不再重复启动
    }
    this.isBlinking = true; // 开始闪烁
    this.intervalId = setInterval(() => {
   
      const randomIndex = Math.floor(Math.random() * this.colors.length);
      this.currentColor = this.colors[randomIndex]; // 随机选择颜色
    }, 500); // 每500毫秒更新颜色
  }

  // 停止或恢复按钮闪烁
  private toggleBlinking() {
   
    this.isBlinking = !this.isBlinking; // 切换闪烁状态
    if (this.isBlinking) {
   
      this.startBlinking(); // 开始闪烁
    } else {
   
      this.clearBlinking(); // 停止闪烁
    }
  }

  // 停止闪烁的通用方法
  private clearBlinking() {
   
    if (this.intervalId !== null) {
   
      clearInterval(this.intervalId); // 清除定时器
      this.intervalId = null;
    }
  }

  // 恢复按钮默认颜色并停止闪烁
  private resetColor() {
   
    this.currentColor = '#FF5733'; // 恢复默认颜色
    this.isBlinking = false; // 停止闪烁
    this.clearBlinking(); // 清除定时器,确保闪烁停止
  }
}
// 文件名:Index.ets

import {
    BlinkingButtonPage } from './BlinkingButtonPage';

@Entry
@Component
struct Index {
   
  build() {
   
    Column() {
   
      BlinkingButtonPage() // 调用闪烁按钮页面
    }
    .padding(20)
  }
}

效果示例:按钮以一定频率在不同颜色间切换,用户点击按钮可以暂停或恢复闪烁。

20241202_222649.gif


五、代码解读

  • 动态颜色切换:通过 setInterval 定时器,每隔 500 毫秒随机切换按钮颜色。
  • 状态管理:使用 @State 管理按钮的颜色和闪烁状态。
  • 交互控制:按钮点击后,可以触发停止或恢复闪烁的操作。

六、优化建议

  1. 自定义闪烁频率:增加输入框,允许用户调整闪烁速度。
  2. 多按钮闪烁:支持多个按钮同时闪烁,并提供联动控制功能。
  3. 颜色渐变效果:在颜色切换时加入渐变动画,提升视觉效果。

七、相关知识点


小结

通过闪烁按钮效果的实现,用户可以学习状态管理、定时器控制以及动态颜色切换的技术。这一项目提升了 UI 的交互性,为开发更复杂的动画效果提供了基础。


下一篇预告

在下一篇「UI互动应用篇21 - 随机励志语录生成器」中,我们将带你实现一个根据点击按钮生成励志语录的应用,提升应用的趣味性与互动性。


上一篇: 「Mac畅玩鸿蒙与硬件42」UI互动应用篇19 - 数字键盘应用

下一篇: 「Mac畅玩鸿蒙与硬件44」UI互动应用篇21 - 随机励志语录生成器


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


目录
相关文章
|
8月前
|
人机交互 UED 索引
41.[HarmonyOS NEXT Row案例九] 打造流畅可滑动列表项:滑动操作按钮的高级实现
在现代移动应用中,可滑动列表项是一种常见且高效的交互方式,它允许用户通过水平滑动列表项来显示隐藏的操作按钮,如删除、置顶、归档等。本教程将详细讲解如何使用HarmonyOS NEXT的Row组件结合手势和动画创建一个流畅的可滑动列表项,实现滑动操作按钮的高级交互效果。
226 8
|
8月前
|
UED 容器
43.[HarmonyOS NEXT Row案例十一] 构建智能分页控件:Row组件实现页码与翻页按钮的完美结合
分页控件是数据展示类应用中不可或缺的导航元素,它允许用户在大量数据中进行有序浏览。本教程将详细讲解如何使用HarmonyOS NEXT的Row组件创建一个功能完善的分页控件,实现页码显示与前后翻页按钮的完美结合。 分页控件在各类应用场景中广泛应用,如电子商城的商品列表、新闻应用的文章列表、图库应用的图片浏览等。通过合理的设计和交互,可以提升用户的浏览体验和数据访问效率。
179 3
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
780 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
8月前
|
UED 开发者 容器
36.[HarmonyOS NEXT Row案例四] 打造精美图标按钮:垂直对齐与视觉平衡的艺术
在移动应用界面设计中,带图标的操作按钮是一种常见且实用的UI元素,它结合了图标的直观性和文本的描述性,能够有效提升用户体验。本教程将详细讲解如何使用HarmonyOS NEXT的Row组件创建一个带图标的操作按钮,重点介绍垂直对齐与视觉平衡的实现技巧,帮助开发者打造出专业、美观的交互界面。
167 4
|
人工智能 自然语言处理 API
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
UI-TARS Desktop 是一款基于视觉语言模型的 GUI 代理应用,支持通过自然语言控制电脑操作,提供跨平台支持、实时反馈和精准的鼠标键盘控制。
4438 17
用自然语言控制电脑,字节跳动开源 UI-TARS 的桌面版应用!内附详细的安装和配置教程
|
UED
「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
本篇教程将实现一个模拟火车票查询系统,通过输入条件筛选车次信息,并展示动态筛选结果,学习事件处理、状态管理和界面展示的综合开发技巧。
366 13
「Mac畅玩鸿蒙与硬件52」UI互动应用篇29 - 模拟火车票查询系统
「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
本篇教程将实现一个打卡提醒小应用,通过用户输入时间进行提醒设置,并展示实时提醒状态,实现提醒设置和取消等功能。
334 10
「Mac畅玩鸿蒙与硬件53」UI互动应用篇30 - 打卡提醒小应用
|
5月前
|
前端开发 安全 测试技术
Postman Mac 版安装终极指南:从下载到流畅运行,一步到位
Postman 是 API 开发与测试的高效工具,支持各类 HTTP 请求调试与团队协作。本文详解 Mac 版下载、安装步骤,助你快速上手。同时推荐一体化 API 协作平台 Apifox,集文档、调试、测试于一体,提升开发效率与团队协同能力。
|
8月前
|
iOS开发 MacOS 索引
在不受支持的 Mac 上安装 macOS Tahoe 26
在不受支持的 Mac 上安装 macOS Tahoe 26
534 0
在不受支持的 Mac 上安装 macOS Tahoe 26

热门文章

最新文章