ArkUI动画概述

news2025/3/17 6:25:42

目录

1、按照页面分类

 2、按照功能分类

3、显示动画

4、属性动画


        动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS(Frame Per Second),即每秒的动画帧数,帧率越高则动画就会越流畅。

        ArkUI中,产生动画的方式是改变属性值且指定动画参数。动画参数包含了如动画时长、变化规律(即曲线)等参数。当属性值发生变化后,按照动画参数,从原来的状态过渡到新的状态,即形成一个动画。

1、按照页面分类

        ArkUI提供的动画能力按照页面的分类方式,可分为页面内的动画和页面间的动画。如下图所示,页面内的动画指在一个页面内即可发生的动画,页面间的动画指两个页面跳转时才会发生的动画。

 2、按照功能分类

         如果按照基础能力分,可分为属性动画、显式动画、转场动画三部分。如下图所示。 

3、显示动画

         提供全局animateTo显式动画接口来指定由于闭包代码导致的状态变化插入过渡动效。接口如下:

animateTo(value: AnimateParam, event: () => void): void

        参数说明:

参数

类型

是否必填

描述

value

AnimateParam

设置动画效果相关参数。

event

() => void

指定显示动效的闭包函数,在闭包函数中导致的状态变化系统会自动插入过渡动画。

AnimateParam对象说明:

名称

类型

描述

duration

number

动画持续时间,单位为毫秒。

默认值:1000

从API version 9开始,该接口支持在ArkTS卡片中使用。

说明:

- 在ArkTS卡片上最大动画持续时间为1000毫秒,若超出则固定为1000毫秒。

- 设置浮点型类型的值时,向下取整。例如,设置值为1.2,按照1处理。

tempo

number

动画的播放速度,值越大动画播放越快,值越小播放越慢,为0时无动画效果。

默认值:1.0

curve

Curve | ICurve | string

动画曲线。

默认值:Curve.EaseInOut

从API version 9开始,该接口支持在ArkTS卡片中使用。

delay

number

单位为ms(毫秒),默认不延时播放。

默认值:0

说明:

- 设置浮点型类型的值时,向下取整。例如,设置值为1.2,按照1处理。

iterations

number

默认播放一次,设置为-1时表示无限次播放。

默认值:1

playMode

PlayMode

设置动画播放模式,默认播放完成后重头开始播放。

默认值:PlayMode.Normal

从API version 9开始,该接口支持在ArkTS卡片中使用。

相关使用约束请参考PlayMode说明。

onFinish

() => void

动效播放完成回调。

从API version 9开始,该接口支持在ArkTS卡片中使用。

 说明:

  • PlayMode推荐使用PlayMode.Normal和PlayMode.Alternate,此场景下动画的第一轮是正向播放的。如使用PlayMode.Reverse和PlayMode.AlternateReverse,则动画的第一轮是逆向播放的,在动画刚开始时会跳变到终止状态,然后逆向播放动画。
  • 使用PlayMode.Alternate或PlayMode.AlternateReverse时,开发者应保证动画最终状态和状态变量的取值一致,即应保证动画的最后一轮是正向播放的。使用PlayMode.Alternate时,iterations应为奇数。使用PlayMode.AlternateReverse时,iterations应为偶数。
  • 不推荐使用PlayMode.Reverse,此场景下不仅会导致动画刚开始就跳变到终止状态,也会导致动画最终状态和状态变量的取值不同。

        显示动画案例:


@Entry
@Component
struct ViewAnimation1Page {
  @State widthSize: number = 250
  @State heightSize: number = 100
  @State rotateAngle: number = 0
  private flag: boolean = true

  build() {
    Column() {
      Button('change size')
        .width(this.widthSize)
        .height(this.heightSize)
        .margin(30)
        .onClick(() => {
          if (this.flag) {
            animateTo({
              duration: 2000,
              curve: Curve.EaseOut,
              iterations: 3,
              playMode: PlayMode.Alternate,
              onFinish: () => {
                console.info('play end')
              }
            }, () => {
              this.widthSize = 150
              this.heightSize = 60
            })
          } else {
            animateTo({}, () => {
              this.widthSize = 250
              this.heightSize = 100
            })
          }
          this.flag = !this.flag
        })
      Button('change rotate angle')
        .margin(50)
        .rotate({ x: 0, y: 0, z: 1, angle: this.rotateAngle })
        .onClick(() => {
          animateTo({
            duration: 1200,
            curve: Curve.Friction,
            delay: 500,
            iterations: -1, // 设置-1表示动画无限循环
            playMode: PlayMode.Alternate,
            onFinish: () => {
              console.info('play end')
            }
          }, () => {
            this.rotateAngle = 90
          })
        })
    }.width('100%').margin({ top: 5 })
  }
}

         运行效果如下:

显示动画

4、属性动画

        组件的某些通用属性变化时,可以通过属性动画实现渐变过渡效果,提升用户体验。支持的属性包括width、height、backgroundColor、opacity、scale、rotate、translate等。属性动画的接口如下:

animation(value: {duration?: number, tempo?: number, curve?: string | Curve | ICurve, delay?:number, iterations: number, playMode?: PlayMode, onFinish?: () => void})

参数说明:

名称

参数类型

必填

描述

duration

number

设置动画时长。

默认值:1000

单位:毫秒

从API version 9开始,该接口支持在ArkTS卡片中使用。

说明:

- 在ArkTS卡片上最大动画持续时间为1000毫秒。

- 设置浮点型类型的值时,向下取整;设置值为1.2,按照1处理。

tempo

number

动画播放速度。数值越大,动画播放速度越快,数值越小,播放速度越慢。值为0时,表示不存在动画。

默认值:1

curve

string | Curve | ICurve9+

设置动画曲线。

默认值:Curve.EaseInOut

从API version 9开始,该接口支持在ArkTS卡片中使用。

delay

number

设置动画延迟执行的时长。

默认值:0,不延迟播放。

单位:毫秒

取值范围:[0, +∞)

说明:

设置浮点型类型的值时,向下取整。例如,设置值为1.2,按照1处理。

iterations

number

设置播放次数。

默认值:1

取值范围:[-1, +∞)

说明:

设置为-1时表示无限次播放。设置为0时表示无动画效果。

playMode

PlayMode

设置动画播放模式,默认播放完成后重头开始播放。

默认值:PlayMode.Normal

从API version 9开始,该接口支持在ArkTS卡片中使用。

onFinish

() => void

状态回调,动画播放完成时触发。

从API version 9开始,该接口支持在ArkTS卡片中使用。

说明:

当iterations设置为-1时,动画效果无限循环不会停止,所以不会触发此回调。

        属性动画案例:


@Entry
@Component
struct AttrAnimationExample {
  @State widthSize: number = 250
  @State heightSize: number = 100
  @State rotateAngle: number = 0
  @State flag: boolean = true

  build() {
    Column() {
      Button('change size')
        .onClick(() => {
          if (this.flag) {
            this.widthSize = 150
            this.heightSize = 60
          } else {
            this.widthSize = 250
            this.heightSize = 100
          }
          this.flag = !this.flag
        })
        .margin(48)
        .width(this.widthSize)
        .height(this.heightSize)
        .animation({
          duration: 2000,
          curve: Curve.EaseOut,
          iterations: 3,
          playMode: PlayMode.Normal
        })
      Button('change rotate angle')
        .onClick(() => {
          this.rotateAngle = 90
        })
        .margin(50)
        .rotate({ angle: this.rotateAngle })
        .animation({
          duration: 1200,
          curve: Curve.Friction,
          delay: 500,
          iterations: -1, // 设置-1表示动画无限循环
          playMode: PlayMode.Alternate
        })
    }.width('100%').margin({ top: 20 })
  }
}

         运行效果与显示动画一样,动画参数也与显示动画大同小异,这里是点击的时候改变属性、配合animation方法实现动画;显示动画则是在点击的时候使用animateTo方法实现动画。

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

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

相关文章

C#实现串口通讯

1、官网下载Launch Virtual Serial Port Driver Virtual Serial Port Driver - create and emulate virtual COM port,开个虚拟串口: Pair模式(一对,成双成对的意思,就是COM1向COM2传或者COM2向COM1,好比两台机器的CO…

Unity | 渡鸦避难所-4 | 镜头跟随角色移动

1 Cinemachine 简介 在第一人称视角的游戏中,摄像机需要时刻跟随角色移动。除了手动计算摄像机的位置、旋转外,也可以使用 Unity 提供的 Cinemachine 插件来轻松实现摄像机的控制 Cinemachine 是一套用于操作 Unity 相机的模块,解决了跟踪目…

【AI】阿里云免费GPU服务资源领取方法

首先,直接点击链接:阿里云免费试用 也可以复制链接到浏览器进行跳转:https://free.aliyun.com?userCodernbj0c1o 页面如下所示:这里的免费试用期限是3个月,给的资源点够我们试用V100 16G显存服务器300个小时&#xff…

【Java】智慧工地云平台管理系统源码

智慧工地平台-系统架构 •统一数据标准、规范数据接口 •决策支持:数据挖掘、全文搜索引擎、OLAP分析、统计报表 •智慧工地平台:项目人员管理、视频监控管理、安全隐患管理、现场物料管理、危大工程监测、绿色文明施工。 •物联网采集:人脸识…

Linux入门——环境 基本指令 基本工具 权限的初步认识

目录 1.Linux的历史 2.利用云服务器设置Linux 3.使用Xshell连接阿里云服务器 4.Linux常见的指令 5.什么是操作系统? 6.命令解释器 7. linux的权限的初步认识 8.相关习题的练习 1.Linux的历史 1991 年 10 月 5 日,赫尔辛基大学的一名研究生 Linus B…

解决企业TB或者PB级大文件传输速度和安全问题

随着企业数据不断增加,TB或PB级大文件的传输成为企业信息共享和数据备份的重要手段之一。然而,这些大文件的传输速度和安全问题成为制约企业发展的瓶颈,也是企业需要解决的重要问题。本文将探讨如何解决这些问题,并从以下几个方面…

基于Java SSM框架实现水果销售网站系统项目【项目源码+论文说明】

基于java的SSM框架实现水果销售网站系统演示 摘要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识&a…

Maven仓库依赖导入‘.lastUpadate‘问题解决

1. 依赖导入不进去先检查 当你开一个新的项目导入maven仓库的时候,发现本地有这个依赖,但是pom.xml文件里的依赖老是爆红,然后无论怎么样去reload->clean->install还是不行, 这时可以先去检查下maven的setting.xml文件和m…

CentOS8+宝塔面板+cpolar内网穿透搭建可公网访问的Typecho个人站点

文章目录 前言1. 安装环境2. 下载Typecho3. 创建站点4. 访问Typecho5. 安装cpolar6. 远程访问Typecho7. 固定远程访问地址8. 配置typecho 前言 Typecho是由type和echo两个词合成的,来自于开发团队的头脑风暴。Typecho基于PHP5开发,支持多种数据库&#…

SpringBoot整合JWT+Spring Security+Redis实现登录拦截(一)

一、JWT简介 JWT 全称 JSON Web Token,JWT 主要用于用户登录鉴权,当用户登录之后,返回给前端一个Token,之后用户利用Token进行信息交互。 除了JWT认证之外,比较传统的还有Session认证,如何选择可以查看之前…

2024年【道路运输企业安全生产管理人员】考试题及道路运输企业安全生产管理人员报名考试

题库来源:安全生产模拟考试一点通公众号小程序 道路运输企业安全生产管理人员考试题考前必练!安全生产模拟考试一点通每个月更新道路运输企业安全生产管理人员报名考试题目及答案!多做几遍,其实通过道路运输企业安全生产管理人员…

web功能实例 - Canvas裁剪工具

嗯,手撸官方文档2天,发现没啥用,尤其是动画,那种计算出来的,根本想不到。因此学着学了抱着要做个东西的想法,去网上找相关案例,最终做出了这个裁剪工具。 PS :先说一下思路: 核心实现有3个canvas图层, 其中一个负责图片的预览。另外2个叠加到…

【深度学习】使用ffmpg及gstreamer进行视频拉流及编解码(一):ffmpg

目录 为什么要进行视频编解码网络带宽常见的视频编码格式视频分辨率及其占用的经验带宽千兆网口及百兆网口 硬件编解码和软件编解码的区别拉流工具简介安装ffmpg库安装必要的依赖库安装ffmpg库 代码 为什么要进行视频编解码 视频流需要编解码的主要原因是视频文件的数据量很大…

【深度学习】DataComp论文,数据集介绍,大数据模型的数据集介绍

参考: https://laion.ai/blog/datacomp/ 论文:https://arxiv.org/abs/2304.14108 文章目录 论文报告的一些内容datacomp-1B 数据质量比lainon2B要好不同规模数据有多少数据数据处理数据来源 论文报告的一些内容 摘要 多模态数据集是近期如CLIP、Stable …

python 安装django 构建django项目

背景 项目需要,构建一个可视化平台,在参与技术调研后决定选用django作为主要技术栈。 内容 通过Python安装django,我这里的pycharm和Python版本有点低,所有没有通过pycharm页面入口进行创建django项目。 pip install django 安装…

MYSQL一一函数一一流程函数

咱今天讲的是MySQL函数中的流程函数,会有3小题和一个综合案例帮助大家理解 流程函数是很常用的一类函数,可以在SQL语句中实现条件筛选,从而提高语句的效率 小题: ①if语句: select if(flash,ok,error); //如果…

Dash中的callback的使用 多input 6

代码说明 import plotly.express as pxmport plotly.express as px用于导入plotly.express模块并给它起一个别名px。这样在后续的代码中,你可以使用px来代替plotly.express,使代码更加简洁。 plotly.express是Plotly的一个子模块,用于快速创…

QT foreach

原型:foreach(variable, container) container:容器,即被遍历的对象 variable:当前元素,即遍历container过程中,当前的那个元素 代码: QStringList container { "1", "2&quo…

CRM管理系统是怎样分析客户行为的?CRM客户管理功能解析

轻霜冻死单根草,狂风难毁万亩林。拥有坚实客户基础的企业即使面对日趋白热的市场竞争也依然能够勇立潮头。CRM管理系统是维系客户的重要工具之一。CRM管理系统是怎样辅助企业实现客户管理的?我们可以拆解为以下几个方面:1.客户信息管理 2.数据…

使用防火墙是否可以应对DDoS攻击?

很多游戏行业公司对网络安全不够了解,觉得装个防火墙就可以万事大吉了。实际上使用防火墙确实是解决DDoS攻击问题的一种有效方法,一些更先进的防火墙还可以采用其他防御措施,例如:深度包检测、行为分析、人工智能等,来识别和防御各…