目录

  • 前言
  • 帧动画技术概述
  • 关于帧动画
  • 实现帧动画
  • animator实现动画效果
  • animator实现小球抛物运动
  • 自定义帧动画
  • 结束语

    前言

    在移动开发中,帧动画是移动应用中一种常见的动画形式,通过连续播放一系列静态图像来创建动画效果,而且随着用户需求的越来越复杂,帧动画的应用也会越来越广泛。在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生态中继续扮演重要的角色和地位,为用户带来更加丰富和好用的体验。


nshen
2.2k 声望156 粉丝