鸿蒙NEXT开发动画案例9

华为鸿蒙系统(Huawei HarmonyOS) 华为鸿蒙系统 Huawei HarmonyOS 阅读详情

 1.创建空白项目


2.Page文件夹下面新建Spin.ets文件,代码如下:

interface GridItemConfig {
  translate:Translate
}

interface Translate {
    x?: number;
    y?: number;
}

/**
 * TODO SpinKit动画组件(重构版)
 * author: 鸿蒙布道师
 * since: 2025/05/15
 */
@ComponentV2
export struct SpinNine {
  @Require @Param spinSize: number = 36;
  @Require @Param spinColor: ResourceColor;

  // 动画相关状态
  @Local scaleSize: number = this.spinSize * 0.75;
  @Local tran1: number = 0;
  private oldSize: number = this.spinSize;

  aboutToAppear(): void {
    this.oldSize = this.spinSize;
    this.scaleSize = this.spinSize * 0.75;
  }

  build() {
    Stack() {
      Grid() {
        ForEach(this.getGridItems(), (item:GridItemConfig, index) => {
          GridItem() {
            Canvas()
              .chunkStyle()
          }
          .translate(item.translate)
        });
      }
      .rowsTemplate('1fr 1fr 1fr')
      .columnsTemplate('1fr 1fr 1fr')
      .width(this.scaleSize)
      .height(this.scaleSize)
    }
    .width(this.oldSize)
    .height(this.oldSize)
    .alignContent(Alignment.Center)
    .onAppear(() => {
      this.startAnimation();
    })
  }

  // 获取 GridItem 配置数据
  private getGridItems():GridItemConfig[] {
    return [
      { translate: { x: this.tran1 } },
      { translate: { x: this.tran1 } },
      { translate: { y: this.tran1 } },
      { translate: { y: -this.tran1 } },
      { translate: {} }, // 中心无位移
      { translate: { y: this.tran1 } },
      { translate: { y: -this.tran1 } },
      { translate: { x: -this.tran1 } },
      { translate: { x: -this.tran1 } },
    ];
  }

  // 启动动画
  private startAnimation() {
    this.getUIContext().keyframeAnimateTo({ iterations: -1, delay: 0 }, [
      {
        duration: 600,
        curve: Curve.EaseInOut,
        event: () => {
          this.tran1 = 0;
          this.scaleSize = this.oldSize * 1.1;
        }
      },
      {
        duration: 600,
        curve: Curve.EaseIn,
        event: () => {
          this.scaleSize = this.oldSize * 0.75;
          this.tran1 = 0;
        }
      }
    ]);
  }

  @Styles
  chunkStyle(){
    .width(this.oldSize * 0.25)
    .height(this.oldSize * 0.25)
    .backgroundColor(this.spinColor)
    .shadow(ShadowStyle.OUTER_DEFAULT_XS)
  }
}
代码如下:
interface GridItemConfig {
  translate:Translate
}

interface Translate {
    x?: number;
    y?: number;
}

/**
 * TODO SpinKit动画组件(重构版)
 * author: 鸿蒙布道师
 * since: 2025/05/15
 */
@ComponentV2
export struct SpinNine {
  @Require @Param spinSize: number = 36;
  @Require @Param spinColor: ResourceColor;

  // 动画相关状态
  @Local scaleSize: number = this.spinSize * 0.75;
  @Local tran1: number = 0;
  private oldSize: number = this.spinSize;

  aboutToAppear(): void {
    this.oldSize = this.spinSize;
    this.scaleSize = this.spinSize * 0.75;
  }

  build() {
    Stack() {
      Grid() {
        ForEach(this.getGridItems(), (item:GridItemConfig, index) => {
          GridItem() {
            Canvas()
              .chunkStyle()
          }
          .translate(item.translate)
        });
      }
      .rowsTemplate('1fr 1fr 1fr')
      .columnsTemplate('1fr 1fr 1fr')
      .width(this.scaleSize)
      .height(this.scaleSize)
    }
    .width(this.oldSize)
    .height(this.oldSize)
    .alignContent(Alignment.Center)
    .onAppear(() => {
      this.startAnimation();
    })
  }

  // 获取 GridItem 配置数据
  private getGridItems():GridItemConfig[] {
    return [
      { translate: { x: this.tran1 } },
      { translate: { x: this.tran1 } },
      { translate: { y: this.tran1 } },
      { translate: { y: -this.tran1 } },
      { translate: {} }, // 中心无位移
      { translate: { y: this.tran1 } },
      { translate: { y: -this.tran1 } },
      { translate: { x: -this.tran1 } },
      { translate: { x: -this.tran1 } },
    ];
  }

  // 启动动画
  private startAnimation() {
    this.getUIContext().keyframeAnimateTo({ iterations: -1, delay: 0 }, [
      {
        duration: 600,
        curve: Curve.EaseInOut,
        event: () => {
          this.tran1 = 0;
          this.scaleSize = this.oldSize * 1.1;
        }
      },
      {
        duration: 600,
        curve: Curve.EaseIn,
        event: () => {
          this.scaleSize = this.oldSize * 0.75;
          this.tran1 = 0;
        }
      }
    ]);
  }

  @Styles
  chunkStyle(){
    .width(this.oldSize * 0.25)
    .height(this.oldSize * 0.25)
    .backgroundColor(this.spinColor)
    .shadow(ShadowStyle.OUTER_DEFAULT_XS)
  }
}

3.修改Index.ets文件,代码如下:

import { SpinEight } from './Spin';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Column() {
      SpinNine({
        spinSize: 60,
        spinColor: '#FF0000'
      })
    }
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .width('100%')
  }
}
代码如下:
import { SpinEight } from './Spin';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  build() {
    Column() {
      SpinNine({
        spinSize: 60,
        spinColor: '#FF0000'
      })
    }
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
    .height('100%')
    .width('100%')
  }
}

4.运行项目,登录华为账号,需进行签名

5.动画效果如下:
 

【鸿蒙教程】华为HarmonyOS NEXT 应用开发 实现日常提醒应用 主要依据tab组件以及tab 组件的BottomTabBarStyle的构造函数。首页page/MinePage.ets代码如下@Entry@Component// 构造类 自定义底部切换按钮Column() {.width(24)build() {Column() {HomeTabs();//首页}.tabBar(this.TabBuilder(0,$r('app.media.ic_home'),$r('app.media.ic_home_selected'),'首页')) 阅读详情

相关推荐

华为鸿蒙HarmonyOS Next基础开发教程

《HarmonyOSNext开发指南》摘要: HarmonyOSNext是华为2025年推出的纯自研分布式操作系统,完全脱离安卓生态,采用ArkTS语言和微内核架构,具备原生精致、流畅、安全等六大特性。本文系统介绍了开发环境搭建(DevEcoStudio+SDK)、ArkTS语言基础(静态类型检查/声明式UI)、UI开发框架(声明式布局/组件化)、状态管理机制(@State/@Link等装饰器)、本地存储(Preferences)和网络请求(http模块)等核心内容,并包含调试技巧与发布流程。通过60天学习

abcdlwt的博客 1971

【粉丝福利社】鸿蒙HarmonyOS NEXT开发之路 卷1:ArkTS语言篇

在数字化浪潮的推动下,全球科技领域正经历着前所未有的变革。我国作为这一变革的积极参与者,不仅在多个科技前沿领域取得了显著成就,更在计算机操作系统这一核心技术领域孕育出了具有自主知识产权的创新成果—鸿蒙系统(HarmonyOS)。这一系统开发成功不仅是国人的骄傲,更是全球技术竞争中的一股新兴力量。鸿蒙系统的诞生,标志着我国在全球操作系统领域迈出了坚实的一步。凭借其独特的分布式架构、跨平台能力以及对开发者友好的设计理念,它为智能设备带来了全新的使用体验。

愚公智库 10万+

华为鸿蒙HarmonyOS Next鸿蒙开发教程

HarmonyOSNext是华为新一代分布式操作系统,具有原生应用生态、增强分布式能力、开发效率提升等优势。本指南从开发环境搭建开始,详细介绍了HarmonyOSNext的核心架构、应用模型、ArkTS语言基础,以及UI开发、状态管理、数据存储等关键技术。特别强调了分布式应用开发流程,包括设备发现、能力共享等特色功能。最后讲解了应用测试与发布流程,并提供了学习路径建议。教程适合零基础和有经验的开发者,通过系统学习和实践,能够掌握HarmonyOSNext开发的核心技能。随着鸿蒙生态的快速发展,掌握这些技术将

2501_93196080的博客 1337

华为鸿蒙系统HarmonyOS学习之十:鸿蒙HarmonyOS微内核技术

华为鸿蒙系统HarmonyOS学习之十:鸿蒙HarmonyOS发展史与未来

jyl_sh的专栏 1万+

鸿蒙HarmonyOS NEXT开发(5.0)Router切换Navigation

Navigation作为导航容器组件,可以挂载在单个page节点下,也可以叠加、嵌套。Navigation管理了标题栏、内容区和工具栏,内容区用于显示用户自定义页面的内容,并支持页面的路由能力。

wexzmij54187的博客 1875

鸿蒙HarmonyOS NEXT开发之路 卷1:ArkTS语言篇

在数字化浪潮的推动下,全球科技领域正经历着前所未有的变革。我国作为这一变革的积极参与者,不仅在多个科技前沿领域取得了显著成就,更在计算机操作系统这一核心技术领域孕育出了具有自主知识产权的创新成果—鸿蒙系统(HarmonyOS)。这一系统开发成功不仅是国人的骄傲,更是全球技术竞争中的一股新兴力量。鸿蒙系统的诞生,标志着我国在全球操作系统领域迈出了坚实的一步。凭借其独特的分布式架构、跨平台能力以及对开发者友好的设计理念,它为智能设备带来了全新的使用体验。

颜颜yan_的博客 1121

【鸿蒙生态崛起,开发者有哪些机遇与挑战?】HarmonyOS NEXT 引领数字化未来

鸿蒙系统不断创新发展,在智能手机、穿戴、车载、家居等行业领域的应用越来越广泛。HarmonyOS NEXT的发布标志着鸿蒙操作系统进入了全新发展阶段,揭示了在智能生态建设方面的最新成果,原生鸿蒙将为全球用户带来更加智能、互联的数字化生活。

Morse_Chen的博客 6949

鸿蒙Harmony应用开发—ArkTS-路径动画

设置组件进行位移动画时的运动路径。

m0_64420071的博客 1854

HarmonyOS-鸿蒙系统概述

华为“1+8+N” 全场景智慧战略,其中居于核心的“1”是智能手机,“8”是指围绕手机的车机、音箱、耳机、手表/手环、平板、大屏、PC、AR/VR产品,N则指众多泛IoT设备。

Hidanchaofan的博客 3506

鸿蒙系统-初见

初见鸿蒙Os~

小码哥的博客 1494

鸿蒙HarmonyOS NEXT实战(5.0)ArkUI开发>动画曲线

动画曲线是属性关于时间的变化函数,决定属性变化时产生动画的运动轨迹。某一时刻下动画曲线的斜率代表动画的速度,对应属性变化的快慢。一条优秀的动画曲线具备连续光滑、符合用户意图、符合物理世界客观规律的特点。开发者可结合用户的使用场景和意图,为动效选取合适的动画曲线。

wexzmij54187的博客 970

鸿蒙NEXT开发动画案例6

本文介绍了如何在鸿蒙系统中创建一个包含上下弹跳和旋转动画的组件。首先,在Page文件夹下新建Spin.ets文件,定义了一个名为SpinSix的组件,该组件包含两个Canvas元素,分别用于实现上下弹跳和旋转动画。通过startBounceAnimation和startRotateAnimation方法分别启动弹跳和旋转动画,并使用bounceStyle方法定义公共样式。接着,修改Index.ets文件,引入SpinSix组件并设置其参数,如spinSize和spinColor。最后,运行项目并登录华为账号

鸿蒙布道师 1121

HarmonyOS Next开发学习手册——粒子动画

粒子动画 是在一定范围内随机生成的大量粒子产生运动而组成的动画。动画元素是一个个粒子,这些粒子可以是圆点、图片。开发者可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下雪的动效,雪花飘舞就相当于一个个雪花粒子在做动画。粒子动画的效果通过Particle组件展现。基本示例代码和效果如下。

maniuT的博客 2038

鸿蒙NEXT开发动画案例10

本文介绍了如何在鸿蒙系统中创建一个名为SpinTen的动画组件。首先,在Page文件夹下新建Spin.ets文件,定义了一个包含旋转动画的组件,通过Grid布局和Canvas绘制实现动画效果。接着,修改Index.ets文件,引入并调用SpinTen组件,设置其大小和颜色。最后,运行项目并登录华为账号进行签名,即可看到动画效果。该动画通过Keyframe动画实现,具有平滑的缩放和位移效果,适用于加载或等待场景。

鸿蒙布道师 1362

STM32F407ZGT6开发板跑马灯实战:从原理图到烧录全流程(附FlyMcu配置)

本文以正点原子F4探索者开发板(STM32F407ZGT6)为例,手把手指导完成跑马灯实验。内容涵盖从原理图解读、GPIO驱动逻辑分析、HAL库工程搭建,到代码编写与FlyMcu串口烧录配置的全流程,帮助嵌入式开发新手快速实现第一个LED控制程序,打通软硬件开发链路。

weixin_29183637的博客 223

OpenWrt国内镜像源一键切换脚本:清华/阿里/中科大源全搞定

本文介绍了OpenWrt国内镜像源一键切换脚本,支持清华、阿里和中科大三大源,自动识别设备架构和系统版本,显著提升软件包安装速度和成功率。脚本包含架构自动识别、版本适配、多源选择和配置备份等功能,适用于x86_64、ramips/mt7621等常见架构,帮助用户解决海外源访问缓慢的问题。

g5h6i的博客 1176

华为鸿蒙系统版本发展史

鸿蒙OS凭借多终端开发IDE,多语言统一编译,分布式架构Kit提供屏幕布局控件以及交互的自动适配,支持控件拖拽,面向预览的可视化编程,从而使开发者可以基于同一工程高效构建多端自动运行App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。微内核设计的基本思想是简化内核功能,在内核之外的用户态尽可能多地实现系统服务,同时加入相互之间的安全保护。2025年5月8日,华为公司在深圳举办鸿蒙电脑技术与生态沟通会,标志着搭载鸿蒙操作系统的“鸿蒙电脑”正式亮相,国产操作系统在个人电脑(PC)领域实现重要突破。

鹿鸣天涯 8119

【RandLA-Net实战】从零构建隧道点云数据集并训练大场景语义分割模型

本文详细介绍了如何使用RandLA-Net构建隧道点云数据集并进行大场景语义分割模型训练。从数据采集、标注到模型训练与优化,提供了完整的实战指南,特别针对隧道场景的特殊挑战提出了解决方案。通过实际案例展示了RandLA-Net在处理大场景点云数据时的高效性和准确性,为隧道巡检等工程应用提供了可靠的技术支持。

weixin_30485379的博客 115

鸿蒙HarmonyOS NEXT(开发进阶)使用HttpRequest模拟登录实践案例

鸿蒙API内置了对HTTP协议客户端的支持,遗憾的是目前(API 9,包括API 10、11)还不支持服务端(倒是可以在API 10或更高版本中通过TCP Server自行实现一个),本文将讲解HTTP客户端相关方法的使用。

adaedwa187545的博客 1008

大模型蒸馏实战:让小模型获得大模型的知识

本文为初学者提供了一份大模型蒸馏实战指南,通过情感分析任务演示如何将 BERT 的知识迁移到轻量级 TextCNN。文章结合原理图解与 PyTorch 代码,详解软标签生成、温度调节和双损失设计等核心概念,并对比蒸馏前后的性能差异(准确率提升 4.6%,推理速度达 1200 句 / 秒)。内含可直接运行的代码片段、训练技巧及常见问题解答,助力开发者快速掌握模型压缩核心技术,实现工业级部署效率。适合 NLP 入门者学习实践。

1369

ROS2实战:构建模块化启动文件(launch file)以驱动复杂机器人系统

本文详细介绍了ROS2中构建模块化启动文件(launch file)的最佳实践,帮助开发者高效管理复杂机器人系统的节点启动。通过功能分解、参数化设计和嵌套启动等技术,实现批量管理、依赖控制和配置统一,显著提升系统稳定性和调试效率。文章包含实战代码示例和工程化建议,特别适合自动驾驶、物流机器人等场景应用。

weixin_28744613的博客 215

鸿蒙NEXT开发动画案例5

鸿蒙NEXT开发动画案例5

鸿蒙布道师 1614

通过python+openCV实现对图片中箭头方向的判断

摘要: 针对YOLOv8算法在箭头方向识别效果不佳的问题,提出了一种基于OpenCV的解决方案。该方法通过图像预处理、轮廓分析、几何特征提取(凸包、质心、外接矩形)和方向向量计算,准确判断箭头的上下左右方向。代码示例展示了从图像读取到方向识别的完整流程,并提供了优化建议(如调整二值化阈值、处理多轮廓)。该方案在Windows11+Python3.12+OpenCV环境下验证有效,适用于需要简单几何特征分析的箭头方向检测场景。

AnChenliang_1002的博客 702
上一篇: MIT天才Michael Truell:25岁创90亿AI奇迹
下一篇: DeepSeek-V3:突破大模型训练三座大山
鸿蒙布道师
博客等级 码龄6年 1387粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值