当前位置: 首页 > article >正文

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生态中继续扮演重要的角色和地位,为用户带来更加丰富和好用的体验。


http://www.kler.cn/a/469522.html

相关文章:

  • 【开源免费】基于Vue和SpringBoot的贸易行业crm系统(附论文)
  • 除了RAII和智能指针,还有哪些资源管理机制?
  • 深度解析与实践:HTTP 协议
  • 字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化
  • HTML - <a>
  • 前端小案例——520表白信封
  • 群晖上安装Tomcat运行环境
  • 内蒙古水系详细很全shp格式arcgis软件无偏移坐标下载后内容测评
  • [python3]Excel解析库-xlwings
  • 捡鹅卵石C++
  • 走进深圳华为总部参观研学
  • 【AI日记】25.01.05 kaggle 比赛 3-4 | 周反思
  • Android NDK开发实战之环境搭建篇(so库,Gemini ai)
  • 爱诗科技PixVerseV3.5发布:短时极速生成,动漫效果超预期
  • Docker + JMeter + InfluxDB + Grafana搭建压测可视化实时监控
  • K8S中POD的生命周期之钩子函数
  • ubuntu开启root用户
  • jest使用__mocks__设置模拟函数不生效 解决方案
  • 为飞桨PaddlePaddle实现笛卡尔直积
  • 重庆市大数据局:基于可信数据空间的公共数据流通利用
  • 详解GPT-信息抽取任务 (GPT-3 FAMILY LARGE LANGUAGE MODELS)
  • 毕业项目推荐:基于yolov8/yolov5的行人检测识别系统(python+卷积神经网络)
  • d3dcompiler_47.dll缺失怎么修复全攻略:原理、步骤及注意事项
  • JS中的aynsc和await
  • IO编程与正则表达式
  • 保姆级教程Docker部署MySQL镜像