转场动画路径动画

        本篇文章我们介绍下转场动画及路径动画。

1、概述

        转场动画有三种类型,页面间转场、组件内转场、共享元素转场。

2、页面间转场

        页面间转场需要在全局pageTransition方法内配置页面入场和页面退场时的自定义转场动效。

2.1、函数说明

名称

参数

必填

参数描述

PageTransitionEnter

{

type?: RouteType,

duration?: number,

curve?: Curve | string,

delay?: number

}

设置当前页面的自定义入场动效。

- type:页面转场效果生效的路由类型。

默认值:RouteType.None

- duration:动画的时长。

单位:毫秒。

- curve:动画曲线。string类型的取值支持"ease"、"ease-in"、"ease-out"、"ease-in-out"、"extreme-deceleration"、"fast-out-linear-in"、"fast-out-slow-in"、"friction"、"linear"、"linear-out-slow-in"、"rhythm"、"sharp"、"smooth"。

默认值:Curve.Linear

- delay:动画延迟时长。

单位:毫秒

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

说明:

没有匹配时使用系统默认的页面转场效果(根据设备可能会有差异),如需禁用系统默认页面转场效果,可以指定duration为0。

PageTransitionExit

{

type?: RouteType,

duration?: number,

curve?: Curve | string,

delay?: number

}

设置当前页面的自定义退场动效。

- type:页面转场效果生效的路由类型。

默认值:RouteType.None。

- duration:动画的时长,单位为毫秒。

- curve:动画曲线,string类型取值与PageTransitionEnter相同。

默认值:Curve.Linear

- delay:动画延迟时长,单位为毫秒,默认不延迟播放。

默认值:0

单位:毫秒

说明:

没有匹配时使用系统默认的页面转场效果(根据设备可能会有差异),如需禁用系统默认页面转场效果,可以指定duration为0。

 2.2、RouteType枚举说明

名称

描述

Pop

重定向指定页面。从PageB回退到之前的页面PageA。对于PageB,指定RouteType为None或者Pop的PageTransitionExit组件样式生效,对于PageA,指定RouteType为None或者Pop的PageTransitionEnter组件样式生效。

Push

跳转到下一页面。PageA跳转到下一个新的界面PageB。对于PageA,指定RouteType为None或者Push的PageTransitionExit组件样式生效,对于PageB,指定RouteType为None或者Push的PageTransitionEnter组件样式生效。

None

页面未重定向。如Push和Pop描述中RouteType为None的情形,即页面进场时PageTransitionEnter的转场效果生效;退场时PageTransitionExit的转场效果生效。

2.3、属性

参数名称

参数

必填

参数描述

slide

SlideEffect

设置页面转场时的滑入滑出效果。

默认值:SlideEffect.Right

translate

{

x? : number | string,

y? : number | string,

z? : number | string

}

设置页面转场时的平移效果,为入场时起点和退场时终点的值,和slide同时设置时默认生效slide。

- x:横向的平移距离。

- y:纵向的平移距离。

- z:竖向的平移距离。

scale

{

x? : number,

y? : number,

z? : number,

centerX? : number | string,

centerY? : number | string

}

设置页面转场时的缩放效果,为入场时起点和退场时终点的值。

- x:横向放大倍数(或缩小比例)。

- y:纵向放大倍数(或缩小比例)。

- z:竖向放大倍数(或缩小比例)。

- centerX、centerY缩放中心点。

- 中心点为0时,默认的是组件的左上角。

opacity

number

设置入场的起点透明度值或者退场的终点透明度值。

默认值:1

 2.4、SlideEffect枚举说明

名称

描述

Left

设置到入场时表示从左边滑入,出场时表示滑出到左边。

Right

设置到入场时表示从右边滑入,出场时表示滑出到右边。

Top

设置到入场时表示从上边滑入,出场时表示滑出到上边。

Bottom

设置到入场时表示从下边滑入,出场时表示滑出到下边。

事件

事件

功能描述

onEnter(event: (type?: RouteType, progress?: number) => void)

回调入参为当前入场动画的归一化进度[0 - 1]。

- type:跳转方法。

- progress:当前进度。

触发该事件的条件:逐帧回调,直到入场动画结束,progress从0变化到1。

onExit(event: (type?: RouteType, progress?: number) => void)

回调入参为当前退场动画的归一化进度[0 - 1]。

- type:跳转方法。

- progress:当前进度。

触发该事件的条件:逐帧回调,直到退场动画结束,progress从0变化到1。

 2.5、案例

自定义方式1:配置了当前页面的入场动画为淡入,退场动画为缩小。

// index.ets
@Entry
@Component
struct PageTransitionExample1 {@State scale1: number = 1@State opacity1: number = 1build() {Column() {Navigator({ target: 'pages/ui/anim/scene/AExample', type: NavigationType.Push }) {Image($r('app.media.girl2')).width('100%').height('100%').fitOriginalSize(true)}}.scale({ x: this.scale1 }).opacity(this.opacity1)}// 自定义方式1:完全自定义转场过程的效果pageTransition() {PageTransitionEnter({ duration: 1200, curve: Curve.Linear }).onEnter((type: RouteType, progress: number) => {this.scale1 = 1this.opacity1 = progress}) // 进场过程中会逐帧触发onEnter回调,入参为动效的归一化进度(0% -- 100%)PageTransitionExit({ duration: 1500, curve: Curve.Ease }).onExit((type: RouteType, progress: number) => {this.scale1 = 1 - progressthis.opacity1 = 1}) // 退场过程中会逐帧触发onExit回调,入参为动效的归一化进度(0% -- 100%)}
}

        自定义方式2:配置了当前页面的入场动画为从左侧滑入,退场为缩小加透明度变化。

// index.ets
@Entry
@Component
struct PageTransitionExample {@State scale1: number = 1@State opacity1: number = 1build() {Column() {Navigator({ target: 'pages/ui/anim/scene/PageTransitionExapleTarget', type: NavigationType.Push }) {Image($r('app.media.girl4')).width('100%').height('100%')   // 图片存放在media文件夹下}}.scale({ x: this.scale1 }).opacity(this.opacity1)}// 自定义方式2:使用系统提供的多种默认效果(平移、缩放、透明度等)pageTransition() {PageTransitionEnter({ duration: 1200 }).slide(SlideEffect.Left)PageTransitionExit({ delay: 100 }).translate({ x: 100.0, y: 100.0 }).opacity(0)}
}

运行效果如下: 

HarmoneyOS4.0页面间转场动画

3、组件内转场

        组件内转场主要通过transition属性配置转场参数,在组件插入和删除时显示过渡动效,主要用于容器组件中的子组件插入和删除时,提升用户体验(需要配合animateTo才能生效,动效时长、曲线、延时跟随animateTo中的配置)。

3.1、属性

名称

参数类型

参数描述

transition

TransitionOptions

设置组件插入显示和删除隐藏的过渡效果。

默认值:不设置任何过渡效果时,默认有透明度从0到1的过渡效果。若设置了其他过渡效果,以设置的过渡效果为准。

说明:

所有参数均为可选参数,详细描述见TransitionOptions参数说明。

3.2、TransitionOptions参数说明

参数名称

参数类型

必填

参数描述

type

TransitionType

默认包括组件新增和删除。

默认值:TransitionType.All

说明:

不指定Type时说明插入删除使用同一种效果。

opacity

number

设置组件转场时的透明度效果,为插入时起点和删除时终点的值。

默认值:1

取值范围: [0, 1]

说明:

设置小于0或大于1的非法值时,按1处理。

translate

{

x? : number | string,

y? : number | string,

z? : number | string

}

设置组件转场时的平移效果,为插入时起点和删除时终点的值。

-x:横向的平移距离。

-y:纵向的平移距离。

-z:竖向的平移距离。

scale

{

x? : number,

y? : number,

z? : number,

centerX? : number | string,

centerY? : number | string

}

设置组件转场时的缩放效果,为插入时起点和删除时终点的值。

-x:横向放大倍数(或缩小比例)。

-y:纵向放大倍数(或缩小比例)。

-z:当前为二维显示,该参数无效。

- centerX、centerY指缩放中心点,centerX和centerY默认值是"50%"。

- 中心点为0时,默认的是组件的左上角。

rotate

{

x?: number,

y?: number,

z?: number,

angle: number | string,

centerX?: number | string,

centerY?: number | string

}

设置组件转场时的旋转效果,为插入时起点和删除时终点的值。

-x:横向的旋转向量。

-y:纵向的旋转向量。

-z:竖向的旋转向量。

- centerX,centerY指旋转中心点,centerX和centerY默认值是"50%"。

- 中心点为(0,0)时,默认的是组件的左上角。

3.3、案例
// xxx.ets
@Entry
@Component
struct WidgetTransitionExamplePage {@State flag: boolean = true@State show: string = 'show'build() {Column() {Button(this.show).width(80).height(30).margin(30).onClick(() => {// 点击Button控制Image的显示和消失animateTo({ duration: 1000 }, () => {if (this.flag) {this.show = 'hide'} else {this.show = 'show'}this.flag = !this.flag})}).margin({ top: 48 })if (this.flag) {// Image的显示和消失配置为不同的过渡效果Image($r('app.media.girl7')).width(300).height(300).transition({ type: TransitionType.Insert, scale: { x: 0, y: 0 } }).transition({ type: TransitionType.Delete, rotate: { angle: 180 }, opacity: 0, scale: { x: 0, y: 0 } })}}.width('100%')}
}

        主要是通过组件的transition方法指定动画相关参数来配置组件出现或者消失时的动画效果,运行效果如下:

组件转场动画

4、共享元素转场

        当路由进行切换时,可以通过设置组件的 sharedTransition 属性将该元素标记为共享元素并设置对应的共享元素转场动效。

 4.1、属性

名称

参数

参数描述

sharedTransition

id: string,

{

duration?: number,

curve?: Curve | string,

delay?: number,

motionPath?:

{

path: string,

form?: number,

to?: number,

rotatable?: boolean

},

zIndex?: number,

type?: SharedTransitionEffectType

}

两个页面中id值相同且不为空字符串的组件即为共享元素,在页面转场时可显示共享元素转场动效。

- id:设置组件的id。

- duration:描述共享元素转场动效播放时长。

默认值:1000

单位:毫秒

取值范围:[0, +∞)

- curve:默认曲线为Linear,有效值参见Curve说明。

- delay:单位为毫秒,默认不延时播放。

默认值:0

单位:毫秒

取值范围:[0, +∞)

设置小于0的值时,按值为0处理。

- motionPath:运动路径信息,详细说明请参考路径动画。

- path:设置路径。

- from:设置起始值。

- to:设置终止值。

- rotatable:是否旋转。

默认值:false

- zIndex:设置Z轴。

默认值:0

- type:动画类型。

默认值:SharedTransitionEffectType.Exchange

说明

type为SharedTransitionEffectType.Exchange时motionPath才会生效。

4.2、案例

        示例代码为点击图片跳转页面时,显示共享元素图片的自定义转场动效。 起始页面:

// SharedTransitionExample.ets
@Entry
@Component
struct SharedTransitionExample {@State active: boolean = falsebuild() {Column() {Navigator({ target: 'pages/ui/anim/scene/SharedTransitionTargetExamplePage', type: NavigationType.Push }) {Image($r('app.media.girl8')).width(200).height(200).objectFit(ImageFit.Contain).sharedTransition('sharedImage', { duration: 800, curve: Curve.Linear, delay: 100 })}.margin({top: 48}).onClick(() => {this.active = true})}}
}

        目标页面:

// SharedTransitionTargetExamplePage.ets
import router from '@ohos.router'@Entry
@Component
struct SharedTransitionTargetExamplePage {build() {Stack() {Image($r('app.media.girl8')).width('100%').height('100%').objectFit(ImageFit.Contain).sharedTransition('sharedImage', { duration: 800, curve: Curve.Linear, delay: 100 }).onClick(() => {router.back()})}.width('100%').height('100%')}
}

        运行效果如下:

HarmoneyOS4.0共享元素转场动画

5、路径动画

        设置组件进行位移动画时的运动路径。

5.1、属性

名称

参数

描述

motionPath

{

path: string,

from?: number,

to?: number,

rotatable?: boolean

}

设置组件的运动路径。

- path:位移动画的运动路径,使用svg路径字符串。path中支持使用start和end进行起点和终点的替代,如:'Mstart.x start.y L50 50 Lend.x end.y Z',更多说明请参考绘制路径。

- from:运动路径的起点。

取值范围:[0, 1]

- to:运动路径的终点。

取值范围:[0, 1]

- rotatable:是否跟随路径进行旋转。

5.2、案例
@Entry
@Component
struct MotionPathExample {@State toggle: boolean = truebuild() {Column() {Button('click me').margin(50)// 执行动画:从起点移动到(300,200),再到(300,500),再到终点.motionPath({ path: 'Mstart.x start.y L300 200 L300 500 Lend.x end.y', from: 0.0, to: 1.0, rotatable: true }).onClick(() => {animateTo({ duration: 10000, curve: Curve.Linear }, () => {this.toggle = !this.toggle // 通过this.toggle变化组件的位置})})}.width('100%').height('100%').alignItems(this.toggle ? HorizontalAlign.Start : HorizontalAlign.Center)}
}

运行效果如下:

HarmoneyOS4.0路径动画

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

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

相关文章

Arduino/Android 蓝牙通信系统设计解决方案

随着当今安全管理的发展需求以及国家对安全监控行业的支持,这几年,安全监控行业发展迅猛,各类监控系统百花齐放。传统的温度监控系统通过有线或其他方式传送温度数据,而本文提出了利用蓝牙无线传输数据的设计方案,这种…

SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(3)构建g2o顶点

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

FLStudio21中文版水果编曲软件好用吗?如何下载最新版本

FL Studio21版是一款在国内非常受欢迎的多功能音频处理软件,我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 21版还为用户们准备了超多的音乐乐器伴奏,我们可以直接一键调取自己需要的音调。 FL Studio21版不仅拥有非常…

vue利用深拷贝解决修改不能取消的问题

vue利用深拷贝解决修改不能取消的问题 在对某数据进行修改时考虑还需要进行“确认”、“取消”操作,那么在取消时就需要返回保留的数据内容,那么如何将原有数据保留一份则是关键性问题。 显然修改值不能直接进行原值的赋值操作,因为这样无法取…

Hadoop——分布式计算

一、分布式计算概述 1. 什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果分布式计算:多台服务器协同工作,共同完成一个计算任务2. 分布式计算常见的2种工作模式分散->汇总 (MapReduce就是这种模式)将数据分片,多台服务器各自负责一…

金和OA C6 gethomeinfo sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 gethomeinfo接口处存在SQL注入漏洞,攻击者除了可以利用 SQL 注入漏洞获取…

vue3+ts pinia存储及持久化

index.ts 需要安装pinia-plugin-persist npm i pinia-plugin-persist -Simport { createPinia} from "pinia" // 引入批量的pinia持久存储插件 import piniaPluginPersist from pinia-plugin-persist const storecreatePinia(); store.use(piniaPluginPers…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

TCP三次握手在Wireshark数据包中是如何体现的?在此之前,先熟悉TCP三次握手的流程。 TCP三次握手流程 TCP(传输控制协议)是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时,需要进行三次握手,防止因为…

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍,酒架年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【…

uni-app pages.json之globalStyle全局页面样式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

什么是图像中的掩膜(Mask),如何使用掩码

目录 掩膜的基本概念 掩膜的应用示例 实现方式 注意事项 基本步骤 示例:使用OpenCV处理图像 注意事项 在图像处理和计算机视觉领域,掩膜(Mask)是一个非常重要的概念。掩膜通常用于指定图像的某个区域,以便对这个…

STM32软硬件CRC测速对比

硬件CRC配置 以及软硬件CRC速度对比 使用CUBEMX配置默认使用的是CRC32,从库中可以看出这一点 HAL库提供了以下两个计算函数 HAL_CRC_Accumulate(CRC_HandleTypeDef *hcrc, uint32_t pBuffer[], uint32_t BufferLength); 这个函数用于在已有的CRC校验结果的基础上累积…

听GPT 讲Rust源代码--src/tools(26)

File: rust/src/tools/clippy/clippy_lints/src/methods/iter_out_of_bounds.rs 在Rust源代码中,iter_out_of_bounds.rs文件是Clippy lints库的一部分,该库用于静态代码分析,用于检测Rust代码中的潜在问题和错误。iter_out_of_bounds.rs文件中…

第三天:对ThreadLocal理解

ThreadLocal是什么? ThreadLocal,也就是线程本地变量。如果你创建了一个 ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地副本,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量&a…

5G NTN与“手机直连卫星”快速原型

5G非地面网络(5G NTN) 5G非地面网络(Non-Terrestrial Network, NTN)是一项旨在使5G用户终端(5G UE)连接到 位于卫星上的非地面基站(5G gNB)的技术NTN是3GPP R17版本的重要功能,在5G-Advanced中持续演进,已成为3GPP Release 18 工作计划中的重要组成部分…

Wi-Fi、蓝牙、ZigBee等多类型无线连接方式的安全物联网网关设计

随着物联网和云计算技术的飞速发展.物联网终端的数量越来越多,终端的连接方式也更趋多样化,比如 Wi-Fi蓝牙和 ZigBee 等。现有的物联网网关大多仅支持一种或者几种终端的接人方式。无法满足终端异构性的需求。同时,现有的物联网网关与终端设备…

php 不加后缀访问

实现不带后缀访问php文件的方法:首先在htaccess文件中加入内容“RewriteRule ^(api/token) token.php [L]”;然后通过根目录下的“token.php”来接受“api/token”;最后修改配置文件。 考虑的做法有: HTTP重写技术,让…

MySQL数据库MySQL事务与存储引擎

目录 一、MySQL事务 (一)定义 (二)ACID特性 1.原子性 2.一致性 3.隔离性 4.持久性 (三)隔离级别 1.可能出现的一致性问题 (1)脏读 (2)不可重复读 …

React中使用WebRTC

前言 有关WebRTC的一些概念可以参考另外一篇文章 WebRTC概念我这里交换媒体信息、网络信息交换使用的是WebSocket,媒体信息是什么参考 WebRTC概念以下的使用方法中,只有使用WebRTC传输通用数据跟音频流的,视频流要再自己配置一下使用SFU结构…

微短剧,会成为长视频的“救命稻草”吗?

职场社畜秒变霸道总裁,普通女孩穿越成为艳丽皇妃.......这样“狗血”的微短剧,最近不仅在国内各大视频平台上异常火爆,而且还直接火出了国外。 所谓微短剧,就是单集时长从几十秒到十几分钟的剧集,有着相对明确的主题和…