鸿蒙HarmonyO实战-ArkUI动画(组件内转场动画)
前言
转场动画是一种在电影、视频和演示文稿中使用的动画效果,用于平滑地切换不同的场景或幻灯片。转场动画可以增加视觉吸引力,改善观众的观看体验。
常见的转场动画包括淡入淡出、滑动、旋转、放大缩小等效果。这些动画效果可以在场景之间创建无缝的过渡,使观众感到自然流畅。
在电影中,转场动画通常用于切换不同的场景或时间段。例如,一个电影可能从一个场景中的角色身上开始,然后通过淡入淡出或滑动的效果过渡到另一个场景中的不同角色。
在视频编辑软件和演示文稿软件中,转场动画常用于创建幻灯片之间的过渡效果。这些过渡可以使幻灯片之间的切换更加流畅和有趣,从而吸引观众的注意力。
转场动画的选择应根据媒体类型、主题和受众类型来进行,以确保动画效果与内容相匹配,并增强用户体验。
一、组件内转场动画
转场动画的接口为:
transition(value: TransitionOptions)
transition函数的入参为组件内转场的效果,可以定义平移、透明度、旋转、缩放这几种转场样式的单个或者组合的转场效果,必须和animateTo一起使用才能产生组件转场效果。
1.transition常见用法
在HarmonyOS中,transition(过渡)是指在UI界面的元素之间进行平滑的动画切换的一种功能。在过渡中,可以定义元素的插入、删除、移动等动画效果。TransitionType是用来指定过渡类型的枚举值,包括以下三种类型:
TransitionType.All:表示在过渡中包含所有类型的动画效果,包括插入、删除和移动。当使用TransitionType.All时,所有相关元素的过渡动画都会被应用。
TransitionType.Insert:表示只在过渡中包含插入类型的动画效果。当新的元素被插入到UI界面中时,使用TransitionType.Insert可以定义其出现的动画效果。
TransitionType.Delete:表示只在过渡中包含删除类型的动画效果。当元素被从UI界面中删除时,使用TransitionType.Delete可以定义其消失的动画效果。
通过使用这些过渡类型,开发者可以在HarmonyOS应用中实现更加流畅、吸引人的界面切换效果。
Button()
.transition({ type: TransitionType.All, scale: { x: 0, y: 0 } })
Button()
.transition({ type: TransitionType.Insert, translate: { x: 200, y: -200 }, opacity: 0 })
.transition({ type: TransitionType.Delete, rotate: { x: 0, y: 0, z: 1, angle: 360 } })
2.if/else产生组件内转场动画
2.1 无任何动画
@Entry
@Component
struct IfElseTransition {
@State flag: boolean = true;
@State show: string = 'show';
build() {
Column() {
Button(this.show).width(80).height(30).margin(30)
.onClick(() => {
if (this.flag) {
this.show = 'hide';
} else {
this.show = 'show';
}
// 点击Button控制Image的显示和消失
this.flag = !this.flag;
})
if (this.flag) {
Image($r('app.media.mountain')).width(200).height(200)
}
}.height('100%').width('100%')
}
}

2.2 无任何动画
@Entry
@Component
struct IfElseTransition {
@State flag: boolean = true;
@State show: string = 'show';
build() {
Column() {
Button(this.show).width(80).height(30).margin(30)
.onClick(() => {
if (this.flag) {
this.show = 'hide';
} else {
this.show = 'show';
}
animateTo({ duration: 1000 }, () => {
// 动画闭包内控制Image组件的出现和消失
this.flag = !this.flag;
})
})
if (this.flag) {
// Image的出现和消失配置为不同的过渡效果
Image($r('app.media.img_2')).width(200).height(200)
.transition({ type: TransitionType.Insert, translate: { x: 200, y: -200 } })
.transition({ type: TransitionType.Delete, opacity: 0, scale: { x: 0, y: 0 } })
}
}.height('100%').width('100%')
}
}

3.ForEach产生组件内转场动画
@Entry
@Component
struct ForEachTransition {
@State numbers: string[] = ["1", "2", "3", "4", "5"]
startNumber: number = 6;
build() {
Column({ space: 10 }) {
Column() {
ForEach(this.numbers, (item) => {
// ForEach下的直接组件需配置transition效果
Text(item)
.width(240)
.height(60)
.fontSize(18)
.borderWidth(1)
.backgroundColor(Color.Orange)
.textAlign(TextAlign.Center)
.transition({ type: TransitionType.All, translate: { x: 200 }, scale: { x: 0, y: 0 } })
}, item => item)
}
.margin(10)
.justifyContent(FlexAlign.Start)
.alignItems(HorizontalAlign.Center)
.width("90%")
.height("70%")
Button('向头部添加元素')
.fontSize(16)
.width(160)
.onClick(() => {
animateTo({ duration: 1000 }, () => {
// 往数组头部插入一个元素,导致ForEach在头部增加对应的组件
this.numbers.unshift(this.startNumber.toString());
this.startNumber++;
})
})
Button('向尾部添加元素')
.width(160)
.fontSize(16)
.onClick(() => {
animateTo({ duration: 1000 }, () => {
// 往数组尾部插入一个元素,导致ForEach在尾部增加对应的组件
this.numbers.push(this.startNumber.toString());
this.startNumber++;
})
})
Button('删除头部元素')
.width(160)
.fontSize(16)
.onClick(() => {
animateTo({ duration: 1000 }, () => {
// 删除数组的头部元素,导致ForEach删除头部的组件
this.numbers.shift();
})
})
Button('删除尾部元素')
.width(160)
.fontSize(16)
.onClick(() => {
animateTo({ duration: 1000 }, () => {
// 删除数组的尾部元素,导致ForEach删除尾部的组件
this.numbers.pop();
})
})
}
.width('100%')
.height('100%')
}
}

写在最后
- 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
- 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
- 关注小编,同时可以期待后续文章ing,不定期分享原创知识。
- 更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

鸿蒙HarmonyO实战-ArkUI动画(组件内转场动画)的更多相关文章
- ios基础动画、关键帧动画、动画组、转场动画等
概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画 ...
- Activity取消默认转场动画;去掉默认转场动画;
取消默认转场动画: 一般启动一个新的Activity都默认有切换的动画效果,比如打开界面时从右至左的移动.关闭时从右向左的移动,又或者是上下移动.但是有的时候我们不想要这个动画怎么办? 来上代码: m ...
- ios开发核心动画五:转场动画
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...
- 【Flutter 实战】一文学会20多个动画组件
老孟导读:此篇文章是 Flutter 动画系列文章第三篇,后续还有动画序列.过度动画.转场动画.自定义动画等. Flutter 系统提供了20多个动画组件,只要你把前面[动画核心](文末有链接)的文章 ...
- 爆炸销毁动画组件Explosions
爆炸销毁动画组件Explosions 爆炸销毁动画通常应用于界面元素的移除.使用该动画效果可以将移除操作表现的更为直观生动.Explosions组件是一款专门实现爆炸销动画效果的组件,它可以展示界 ...
- iOS自定义转场动画实战讲解
iOS自定义转场动画实战讲解 转场动画这事,说简单也简单,可以通过presentViewController:animated:completion:和dismissViewControllerA ...
- 基于 React 实现一个 Transition 过渡动画组件
过渡动画使 UI 更富有表现力并且易于使用.如何使用 React 快速的实现一个 Transition 过渡动画组件? 基本实现 实现一个基础的 CSS 过渡动画组件,通过切换 CSS 样式实现简单的 ...
- iOS CATransition 自定义转场动画
https://www.jianshu.com/p/39c051cfe7dd CATransition CATransition 是CAAnimation的子类(如下图所示),用于控制器和控制器之间的 ...
- iOS:探究视图控制器的转场动画
一.介绍 在iOS开发中,转场动画的使用无处不见,不只是我们自己更多的使用UIViewblock动画实现一个转场动画,其实,在我们实现VC控制器跳转的时候都是转场动画的实现,例如标签栏控制器的切换.模 ...
- iOS开发UI篇—核心动画(转场动画和组动画)
转自:http://www.cnblogs.com/wendingding/p/3801454.html iOS开发UI篇—核心动画(转场动画和组动画) 一.转场动画简单介绍 CAAnimation的 ...
随机推荐
- Spring与微服务
Spring与微服务 微服务论文 Melvyn Conway 的意识是,像下图所展示的,设计一个系统时,将人员划分为 UI 团队,中间件团队,DBA 团队,那么相应地,软件系统也就会自然地被划分为 U ...
- [VueJsDev] 日志 - nginxConfig 配置文件备份
[VueJsDev] 目录列表 https://www.cnblogs.com/pengchenggang/p/17037320.html nginxConfig 配置文件备份 ::: details ...
- Pod中断预算 PodDisruptionBudget(PDB)
PodDisruptionBudget(PDB)是Kubernetes中的一个资源对象,用于确保在进行维护.升级或其他操作时,系统中的Pod不会被意外中断或终止.PDB提供了一种机制,通过限制在给定时 ...
- c 串口读写数据实例解析
一 前记 程序员就是不断地砌砖头,然后用砖头,把砖头模块化,用的时候直接调用,能够节省很多精力. 二 实例: 1 #include <stdio.h> 2 #include <uni ...
- Android TextView自动缩放能够完整显示出一行
原文地址: Android TextView自动缩放能够完整显示出一行 - Stars-One的杂货小窝 app开发中,需要TextView可以在不同的屏幕大小要完整显示出文字,而不是显示省略号 可以 ...
- 记Okhttp的拦截器导致app崩溃问题
原文: 记Okhttp的拦截器导致app崩溃问题 - Stars-One的杂货小窝 app对接的后台接口,传参需要加密,获取数据需要解密,于是使用了拦截器去实现,然后发现以下问题: 即使在发起请求的那 ...
- Linux查看用户的7个命令
Linux是中国IT实验室的一个技术频道.包含桌面应用,Linux系统管理,内核研究,嵌入式系统和开源等一些基本分类 在Linux系统里,我们会经常用Linux查看用户的命令,在这里我们一些 ...
- drf(JWT认证)
一. jwt实现过程 1. 构建jwt过程 第一: 用户提交用户名和密码给服务端,如果登录成功,使用jwt创建一个token,并给用户返回 eyJ0eXAiOiJqd3QiLCJhbGciOiJIUz ...
- 记录--什么时候会阻塞HTML文档渲染过程?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 HTML页面加载过程会发生什么?因为浏览器网络拉取资源是多线程的,但是dom树的操作都是在一个线程中的,所以网页资源的解析.js加载.do ...
- KingbaseES V8R6集群运维案例之---同一主机节点部署多个集群
案例说明: 在同一主机环境,由于生产需要,需要部署两个集群:本案例详细描述了两个集群的部署过程. 注意:同一主机部署多个集群需要先部署securecmdd服务,节点之间通过securecmdd服务通讯 ...