鸿蒙初学者学习手册(HarmonyOSNext_API14)_自定义动画API(@ohos.animator (动画) )

前言

在纯血鸿蒙中最具有用户特色的效果就是自定义的动画效果。在纯血鸿蒙中有多种定义方式,但是今天介绍的是ApI中的自定义动画。

注意:

动画本身具有生命周期,但是不支持在UIAbility的文件使用,简单而言就是不允许在UIAbility生命周期中调用

涉及到的API属性

Animator

属性参数功能参数类型返回类型
createcreate(options: AnimatorOptions): AnimatorResult创建动画AnimatorOptions (必填)AnimatorResult

AnimatorResult

属性参数功能参数类型返回类型
resetreset(options: AnimatorOptions): void更新当前动画器。AnimatorOptions(必填)
playplay(): void启动动画。动画会保留上一次的播放状态,比如播放状态设置reverse后,再次播放会保留reverse的播放状态。
finishfinish(): void结束动画
pausepause(): void暂停动画。
cancelcancel(): void取消动画。
reversereverse(): void以相反的顺序播放动画。使用interpolating-spring曲线时此接口无效。

回调函数(理解为生命周期)

属性参数功能参数类型返回类型
onFrameonFrame: (progress: number) => void接收到帧时回调。progress:number(必填)
onFinishonFinish: () => void动画完成时回调。
onCancelonCancel: () => void动画被取消时回调。
onRepeatonRepeat: () => void动画重复时回调。

AnimatorOptions(定义动画选项。)

名称类型必填功能
durationnumber动画持续时间
easingstring动画插值曲线
delaynumber动画延时播放时长,单位毫秒,设置为0时,表示不延时。
fill‘none’ ‘forwards’ ‘backwards’ ‘both’动画执行后是否恢复到初始状态,动画执行后,动画结束时的状态(在最后一个关键帧中定义)将保留。
direction‘normal’ ‘reverse’ ‘alternate’ ‘alternate-reverse’动画播放模式正序,逆序,交替正序,交替逆序
iterationsnumber动画播放次数
beginnumber动画插值起点。
endnumber动画插值终点。

注意:以上为涉及属性和参数一下为示例代码和详细注释

import { Animator as animator, AnimatorResult } from '@kit.ArkUI'; // 导入动画模块/*** 动画测试组件,用于演示和测试动画功能。*/
@Entry
@Component
struct AnimatorTest {/*** 日志标签,用于标识日志输出的来源。*/private TAG: string = '[AnimatorTest]' // 定义日志标签/*** 动画实例,用于控制动画的播放、暂停等操作。*/private backAnimator: AnimatorResult | undefined = undefined // 初始化动画实例为 undefined/*** 标记动画是否结束的标志位。*/private flag: boolean = false // 初始化标志位为 false/*** 宽度状态变量,用于动态更新动画元素的宽度。*/@State wid: number = 100 // 初始化宽度为 100/*** 高度状态变量,用于动态更新动画元素的高度。*/@State hei: number = 100 // 初始化高度为 100/*** 创建并初始化动画实例。* 设置动画的各种参数,并定义动画结束、重复、取消和每一帧的回调函数。*/create() {this.backAnimator = animator.create({ // 创建动画实例duration: 2000,     // 设置动画持续时间为 2000 毫秒easing: "ease",     // 设置动画曲线类型为 easedelay: 0,           // 设置动画延迟时间为 0 毫秒fill: "forwards",   // 设置动画结束后保持最后一帧的状态direction: "normal",// 设置动画播放方向为 normaliterations: 1,      // 设置动画循环次数为 1begin: 100,         // 设置动画起始值为 100end: 200            // 设置动画结束值为 200})/*** 动画结束时的回调函数。* 将 `flag` 置为 `true` 并输出日志。*/this.backAnimator.onFinish = () => { // 定义动画结束时的回调函数this.flag = true // 将标志位置为 trueconsole.info(this.TAG, 'backAnimator onfinish') // 输出日志信息}/*** 动画重复时的回调函数。* 输出日志信息。*/this.backAnimator.onRepeat = () => { // 定义动画重复时的回调函数console.info(this.TAG, 'backAnimator repeat') // 输出日志信息}/*** 动画取消时的回调函数。* 输出日志信息。*/this.backAnimator.onCancel = () => { // 定义动画取消时的回调函数console.info(this.TAG, 'backAnimator cancel') // 输出日志信息}/*** 动画每一帧的回调函数。* 更新 `wid` 和 `hei` 的值以实现动画效果。*/this.backAnimator.onFrame = (value: number) => { // 定义动画每一帧的回调函数this.wid = value // 更新宽度this.hei = value // 更新高度}}/*** 在组件即将消失时调用。* 将 `backAnimator` 置空,避免内存泄漏。*/aboutToDisappear() {// 由于backAnimator在onframe中引用了this, this中保存了backAnimator,// 在自定义组件消失时应该将保存在组件中的backAnimator置空,避免内存泄漏this.backAnimator = undefined; // 将动画实例置空}/*** 构建页面布局。* 包含一个红色的矩形和多个按钮,用于控制动画的创建、播放、暂停、完成、反转、取消和重置。*/build() {Column() { // 创建最外层的 Column 布局Column() { // 创建第二层 Column 布局Column() // 创建第三层 Column 布局.width(this.wid) // 设置宽度为当前宽度状态变量.height(this.hei) // 设置高度为当前高度状态变量.backgroundColor(Color.Red) // 设置背景颜色为红色}.width('100%') // 设置宽度为 100%.height(300) // 设置高度为 300Column() { // 创建包含按钮的 Column 布局Row() { // 创建包含“create”按钮的 Row 布局Button('create') // 创建“create”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件this.create() // 调用 create 方法创建动画})}.padding(10) // 设置内边距为 10Row() { // 创建包含“play”按钮的 Row 布局Button('play') // 创建“play”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件this.flag = false // 将标志位置为 falseif (this.backAnimator) { // 如果动画实例存在this.backAnimator.play() // 播放动画}})}.padding(10) // 设置内边距为 10Row() { // 创建包含“pause”按钮的 Row 布局Button('pause') // 创建“pause”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件if (this.backAnimator) { // 如果动画实例存在this.backAnimator.pause() // 暂停动画}})}.padding(10) // 设置内边距为 10Row() { // 创建包含“finish”按钮的 Row 布局Button('finish') // 创建“finish”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件this.flag = true // 将标志位置为 trueif (this.backAnimator) { // 如果动画实例存在this.backAnimator.finish() // 结束动画}})}.padding(10) // 设置内边距为 10Row() { // 创建包含“reverse”按钮的 Row 布局Button('reverse') // 创建“reverse”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件this.flag = false // 将标志位置为 falseif (this.backAnimator) { // 如果动画实例存在this.backAnimator.reverse() // 反转动画}})}.padding(10) // 设置内边距为 10Row() { // 创建包含“cancel”按钮的 Row 布局Button('cancel') // 创建“cancel”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件if (this.backAnimator) { // 如果动画实例存在this.backAnimator.cancel() // 取消动画}})}.padding(10) // 设置内边距为 10Row() { // 创建包含“reset”按钮的 Row 布局Button('reset') // 创建“reset”按钮.fontSize(30) // 设置字体大小为 30.fontColor(Color.Black) // 设置字体颜色为黑色.onClick(() => { // 设置点击事件if (this.flag) { // 如果动画已结束this.flag = false // 将标志位置为 falseif (this.backAnimator) { // 如果动画实例存在this.backAnimator.reset({ // 重置动画参数duration: 3000, // 设置新的持续时间为 3000 毫秒easing: "ease-in", // 设置新的动画曲线类型为 ease-indelay: 0, // 设置新的延迟时间为 0 毫秒fill: "forwards", // 设置新的动画结束后保持最后一帧的状态direction: "alternate", // 设置新的动画播放方向为 alternateiterations: 3, // 设置新的动画循环次数为 3begin: 100, // 设置新的动画起始值为 100end: 300 // 设置新的动画结束值为 300})}} else { // 如果动画未结束console.info(this.TAG, 'Animation not ended') // 输出日志信息}})}.padding(10) // 设置内边距为 10}}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

搭建Kubernetes (K8s) 集群----Centos系统

前期准备 准备3台Linux虚拟机(CentOS系统),参考 https://carry.blog.csdn.net/article/details/144578009https://carry.blog.csdn.net/article/details/144578009搭建Docker环境,参考 https://carry.blog.csdn.net/article/de…

wps中的js开发

严格区分大小写 /*** learn_js Macro*/ function test() {Range(D7).Value2Selection.Value2; // Selection.formula "100" }function Workbook_SheetSelectionChange(Sh, Target) {if(Sh.Name Sheet1) {test();}}function test2() {// 把I4单元格及其周边有数的单…

第3章 3.2 配置系统 .NET Core配置系统

3.2.1 配置系统的基本使用 .NET Core中的配置系统支持非常丰富的配置源,包括文件(JSON、XML、INI等)、注册表、环境变量、命令行、Azure Key Vault等,配置系统还支持自定义配置源。 用配置系统开发包Microsoft.Extensions.Confi…

第六届计算机信息和大数据应用国际学术会议(CIBDA 2025)

重要信息 大会官网:www.ic-cibda.org(了解会议,投稿等) 大会时间:2025年3月14-16日 大会地点:中国-武汉 简介 第六届计算机信息和大数据应用(CIBDA 2025)将于2025年3月14-16日在中国…

Mac M3/M4 本地部署Deepseek并集成vscode

Mac 部署 使用傻瓜集成平台ollama,ollama平台依赖于docker,Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用,导致docker无法启动,需要使用docker的替代品podman, 它完全兼容docker brew install p…

最优化方法-牛顿法

牛顿法 泰勒级数 泰勒级数展开 $$ \begin{aligned} f(x)&\lim\limits_{n\rightarrow \infin}\sum\limits_{i1}n\frac{1}{n!}f{(n)}(x_0)(x-x_0)^n\ &f(x_0)f’(x_0)(x-x_0)\frac{f’(x_0)}{2!}(x-x_0)2\cdots\frac{1}{n!}fn(x_0)(x-x_0)^n\ &\quad~ O\left[(x-x_…

【系统架构】分布式事务模型详解

1. 分布式基础理论 1.1 CAP理论 CAP 理论可以表述为,一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三项中的两项。 一致性是…

「正版软件」PDF Reader - 专业 PDF 编辑阅读工具软件

PDF Reader 轻松查看、编辑、批注、转换、数字签名和管理 PDF 文件,以提高工作效率并充分利用 PDF 文档。 像专业人士一样编辑 PDF 编辑 PDF 文本 轻松添加、删除或修改 PDF 文档中的原始文本以更正错误。自定义文本属性,如颜色、字体大小、样式和粗细。…

使用GDI+、文件和目录和打印API,批量将图片按文件名分组打包成PDF

代码写了两个小时&#xff0c;速度太慢&#xff08;包括学习文档的时间&#xff09; #include <stdio.h> #include <Windows.h> #include <gdiplus.h> #include <string.h> using namespace Gdiplus; #pragma comment(lib, "Gdiplus.lib") …

设计模式教程:责任链模式(Chain of Responsibility Pattern)

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种常用的设计模式&#xff0c;它属于行为型模式&#xff0c;主要解决的是多个对象处理一个请求时&#xff0c;如何解耦请求的发送者和接收者&#xff0c;以及如何将请求的处理职责分配给不同的对象。 1…

鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )

前言&#xff1a; 这个模块可以截取组件的图片&#xff0c;无论组件是否已加载。截图只能拍到组件本身的大小区域。 如果组件或其子组件画得超出了自己的区域&#xff0c;超出的部分不会出现在截图中。截图不会拍到与当前组件平级的&#xff08;兄弟&#xff09;组件。 模块简…

解决 LeetCode 串联所有单词的子串问题

问题描述 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如&#xff0c;如果 words ["ab","cd","ef"]&#xff0c; 那么 &q…

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应&#xff08;标签&#xff09;、样本权重…

在 Mac ARM 架构 (Apple Silicon,例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL

在 Mac ARM 架构 (Apple Silicon&#xff0c;例如 M1, M2, M3 芯片) 上使用官方安装包安装 MySQL&#xff0c;步骤与在 Intel Mac 上类似&#xff0c;但需要确保下载的是 ARM 架构兼容的版本。以下是详细的安装步骤&#xff1a; 步骤 1: 下载 MySQL Community Server DMG 安装…

以ChatGPT为例解析大模型背后的技术

目录 1、大模型分类 2、为什么自然语言处理可计算&#xff1f; 2.1、One-hot分类编码&#xff08;传统词表示方法&#xff09; 2.2、词向量 3、Transformer架构 3.1、何为注意力机制&#xff1f; 3.2、注意力机制在 Transformer 模型中有何意义&#xff1f; 3.3、位置编…

AI训练中的常用指令

以下是一些常用于深度学习训练的 Linux 指令&#xff0c;可以帮助你高效管理和执行训练任务&#xff1a; 文件管理 查看当前目录内容&#xff1a;ls进入目录&#xff1a;cd 路径/到/目录创建新目录&#xff1a;mkdir 新目录名称删除文件或目录&#xff1a; 删除文件&#xff…

【ARM入门指南】一文搞懂什么是ARM

在单片机与嵌入式系统的浩瀚宇宙中&#xff0c;ARM架构犹如一颗耀眼的星辰&#xff0c;持续引领着技术创新的潮流。对于刚刚踏入这一领域的初学者而言&#xff0c;深入了解ARM是迈入嵌入式开发大门的关键一步。ARM&#xff0c;这个名字背后&#xff0c;不仅代表着一家在半导体设…

接口测试-API测试中常用的协议(下)

一、RPC RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用协议&#xff0c;它允许程序调用位于其他计算机上的程序中的过程或函数&#xff0c;就像调用本地程序中的过程一样。下面从其概念、工作原理、特点、应用场景等方面详细介绍&#xff1a; 概念起源与核…

Go Web 项目实战:构建 RESTful API、命令行工具及应用部署

Go Web 项目实战&#xff1a;构建 RESTful API、命令行工具及应用部署 Go 语言因其简洁高效、并发支持强大等特点&#xff0c;已经成为了后端开发的热门选择之一。本篇文章将通过实战案例带领你学习如何使用 Go 构建一个简单的 RESTful API&#xff0c;开发命令行工具&#xf…

Http升级为Https - 开发/测试服环境

1.应用场景 主要用于开发/测试服环境将http升级为https, 防止前端web(浏览器)出现Mixed Content报错; 2.学习/操作 1.文档阅读 deepseek 问答; 2.整理输出 报错信息: Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequ…