HarmonyOS开发:关于帧动画使用分享

目录

引言

关于帧动画技术

关于帧动画

实现帧动画

animator实现动画效果

1、引入相关依赖

2、创建执行动画对象

3、播放动画

4、释放对象

animator实现小球抛物运动

1、引入相关依赖

2、定义动画组件

3、创建对象

4、操作按钮设置

5、释放对象

自定义帧动画

结束语


引言

在移动开发中,帧动画是移动应用中一种常见的动画形式,通过连续播放一系列静态图像来创建动画效果,而且随着用户需求的越来越复杂,帧动画的应用也会越来越广泛。在HarmonyOS中,帧动画的使用不仅可以提升应用的交互体验,还能增强视觉效果,是鸿蒙原生开发中的关键技术点。那么本文就来详细介绍如何在HarmonyOS应用中实现帧动画,包括帧动画的基本概念、实现步骤和代码示例,方便大家查阅了解使用。

关于帧动画技术

帧动画,也称为帧序列动画,是通过将一系列图像(帧)按顺序快速播放来创建动画效果的技术。每一帧都是动画中的一个静态图像,连续播放这些帧就形成了动态效果。通过返回应用onFrame逐帧回调的方式,让开发者在应用侧的每一帧都可以设置属性值,从而实现设置了该属性值对应组件的动画效果。相比于属性动画,开发者可感知动画的过程,实时修改UI侧的值,具有事件可实时响应、可暂停的优点,但性能上不如属性动画。

关于帧动画

在HarmonyOS中,帧动画一般情况下,主要涉及下面的操作:

  1. 准备帧资源:创建或获取一系列用于动画的图像资源。
  2. 创建动画集:将帧资源组织成动画集。
  3. 播放动画:在应用中播放动画集。
  4. 控制动画:控制动画的播放、暂停、重复等行为。

实现帧动画

接下来分享关于帧动画的具体实现过程,本文主要是通过使用animator实现动画效果和使用animator实现小球抛物运动来做示例演示。

animator实现动画效果

1、引入相关依赖

首先,需要引入相关依赖,具体如下所示:

import { AnimatorOptions, AnimatorResult } from '@kit.ArkUI';

2、创建执行动画对象

接着创建执行动画的对象,具体如下所示:

// 创建动画的初始参数
let options: AnimatorOptions = {                        
   duration: 1500,                               
   easing: "friction",                        
   delay: 0,                           
   fill: "forwards",                                  
   direction: "normal",                                  
   iterations: 2,                                        
   // 动画onFrame 插值首帧值                                    
   begin: 200.0,                                         
   // 动画onFrame 插值尾帧值                                    
   end: 400.0                                            
}; 
let result: AnimatorResult = this.getUIContext().createAnimator(options);
   // 设置接收到帧时回调,动画播放过程中每帧会调用onFrame回调
    result.onFrame = (value: number) => {

}

3、播放动画

接着播放动画,具体如下所示:

// 播放动画
result.play();

4、释放对象

接着是动画执行完成后手动释放AnimatorResult对象,具体如下所示:

// 释放动画对象
result = undefined;

animator实现小球抛物运动

1、引入相关依赖

首先,需要引入相关依赖,具体如下所示:

import { AnimatorOptions, AnimatorResult } from '@kit.ArkUI';

2、定义动画组件

接着定义要做动画的组件,具体如下所示:

Button()
  .width(60)
  .height(60)
  .translate({ x: this.translateX, y: this.translateY })

3、创建对象

然后在onPageShow中,创建AnimatorResult对象,具体如下所示:

onPageShow(): void {
    //创建animatorResult对象
    this.animatorOptions = this.getUIContext().createAnimator(options);
    this.animatorOptions.onFrame = (progress: number) => {
    this.translateX = progress;
    if (progress > this.topWidth && this.translateY < this.bottomHeight) {
       this.translateY = Math.pow(progress - this.topWidth, 2) * this.g;
    }
 }
 //动画取消时执行方法
 this.animatorOptions.onCancel = () => {
    this.animatorStatus = '取消';
 }
 //动画完成时执行方法
 this.animatorOptions.onFinish = () => {
    this.animatorStatus = '完成';
 }
 //动画重复播放时执行方法
 this.animatorOptions.onRepeat = () => {

 }
}

4、操作按钮设置

接着是定义动画播放,重置,暂停的按钮,具体如下所示:

Button('播放').onClick(() => {
  this.animatorOptions?.play();
  this.animatorStatus = '播放中'
}).width(80).height(35)
Button("重置").onClick(() => {
  this.translateX = 0;
  this.translateY = 0;
}).width(80).height(35)
Button("暂停").onClick(() => {
  this.animatorOptions?.pause();
  this.animatorStatus = '暂停'
}).width(80).height(35)

5、释放对象

最后在页面隐藏或销毁的生命周期中释放动画对象,避免内存泄漏,具体如下所示:

onPageHide(): void {
  this.animatorOptions = undefined;
}

自定义帧动画

除了上面基本的帧动画功能,开发使用者还可以根据应用的需求自定义帧动画,比如下面的操作:

  • 响应用户输入:根据用户的触摸或手势改变动画的播放速度或方向。
  • 与其他动画结合:将帧动画与其他类型的动画(如属性动画)结合,创造更复杂的视觉效果。

结束语

不用多说,就可以看出帧动画是HarmonyOS开发中的一项基本功能,它为应用提供了丰富的视觉效果和用户互动。通过本文的介绍,大家应该都了解了如何在HarmonyOS应用中实现帧动画,以及后面的开发中也会运用帧动画相关的技术点来实现动画效果。随着技术的不断发展,帧动画将在HarmonyOS生态中继续扮演重要的角色和地位,为用户带来更加丰富和好用的体验。

相关推荐
小冷爱学习!7 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
2501_904447747 小时前
华为发力中端,上半年nova14下半年nova15,大力普及原生鸿蒙
华为·智能手机·django·scikit-learn·pygame
MarkHD8 小时前
第十八天 WebView深度优化指南
华为·harmonyos
塞尔维亚大汉9 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI CSI】
harmonyos·领域驱动设计
别说我什么都不会9 小时前
鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
操作系统·harmonyos
feiniao865110 小时前
2025年华为手机解锁BL的方法
华为·智能手机
塞尔维亚大汉11 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【I3C】
harmonyos·领域驱动设计
VVVVWeiYee11 小时前
BGP配置华为——路径优选验证
运维·网络·华为·信息与通信
今阳12 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
余多多_zZ13 小时前
鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )
学习·华为·harmonyos·鸿蒙·鸿蒙系统