鸿蒙开发系列教程(十九)--页面内动画(2)

组件内转场动画

组件的插入、删除过程即为组件本身的转场过程,组件的插入、删除动画称为组件内转场动画。通过组件内转场动画,可定义组件出现、消失的效果。

transition(value: TransitionOptions)

参数可以定义平移、透明度、旋转、缩放这几种转场样式的单个或者组合的转场效果,

必须和[animateTo]一起使用才能产生组件转场效果。

语法:

(1)只定义组件的插入或删除其中一种动画效果。
Button()
.transition({ type: TransitionType.Delete, translate: { x: 200, y: -200 } })

(2)组件的插入、删除使用不同的动画效果
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 } })

(3)组件的插入、删除使用同一个动画效果
Button()
.transition({ type: TransitionType.All, scale: { x: 0, y: 0 } })

示例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';}animateTo({ duration: 1000 }, () => {// 动画闭包内控制Image组件的出现和消失this.flag = !this.flag;})})if (this.flag) {// Image的出现和消失配置为不同的过渡效果//app.media.a6  图片,resources/base/media/a6.jpgImage($r('app.media.a6')).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%')}
}

##请添加图片描述

示例2:

@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).backgroundImage($r('app.media.a6'))// .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%')}
}

请添加图片描述

弹簧动画

通过弹簧曲线,开发者可以设置超过设置的终止值,在终止值附近震荡,直至最终停下来的效果

弹簧曲线的接口包括两类,一类是[springCurve],另一类是[springMotion和[responsiveSpringMotion],这两种方式都可以产生弹簧曲线。

语法:

springCurve(velocity: number, mass: number, stiffness: number, damping: number)

构造参数包括初速度,弹簧系统的质量、刚度、阻尼。构建springCurve时,可指定质量为1,根据springCurve中的参数说明,调节刚度、阻尼两个参数,达到想要的震荡效果。

springMotion(response?: number, dampingFraction?: number, overlapDuration?: number)

responsiveSpringMotion(response?: number, dampingFraction?: number, overlapDuration?: number)

它们的构造参数包括弹簧自然振动周期、阻尼系数、弹性动画衔接时长这三个可选参数

示例1:

import curves from '@ohos.curves';
@Entry
@Component
struct SpringTest {@State translateX: number = 0;private jumpWithSpeed(speed: number) {this.translateX = -1;animateTo({ duration: 2000, curve: curves.springCurve(speed, 1, 1, 1.2) }, () => {// 以指定初速度进行x方向的平移的弹簧动画this.translateX = 0;})}build() {Column() {Button("测试").fontSize(14).width(100).height(50).margin(30)// .backgroundImage($r('app.media.a6')).backgroundColor("red").translate({ x: this.translateX })Row({space:50}) {Button("弹 50").fontSize(14).onClick(() => {// 以初速度50的弹簧曲线进行平移this.jumpWithSpeed(50);})Button("弹 200").fontSize(14).onClick(() => {// 以初速度200的弹簧曲线进行平移this.jumpWithSpeed(200);})}.margin(30)}.height('100%').width('100%')}
}

示例2:

import curves from '@ohos.curves';@Entry
@Component
struct SpringMotionTest {@State positionX: number = 100;@State positionY: number = 100;diameter: number = 50;build() {Column() {Row() {Circle({ width: this.diameter, height: this.diameter }).fill(Color.Yellow).position({ x: this.positionX, y: this.positionY }).onTouch((event: TouchEvent) => {if (event.type === TouchType.Move) {// 跟手过程,使用responsiveSpringMotion曲线animateTo({ curve: curves.responsiveSpringMotion() }, () => {// 减去半径,以使球的中心运动到手指位置this.positionX = event.touches[0].screenX - this.diameter / 2;this.positionY = event.touches[0].screenY - this.diameter / 2;console.info(`move, animateTo x:${this.positionX}, y:${this.positionY}`);})} else if (event.type === TouchType.Up) {// 离手时,使用springMotion曲线animateTo({ curve: curves.springMotion() }, () => {this.positionX = 100;this.positionY = 100;console.info(`touchUp, animateTo x:100, y:100`);})}})}.clip(true) // 如果球超出父组件范围,使球不可见.backgroundImage($r('app.media.a6')).backgroundImageSize({width:"100%",height:"100%"}).width("100%").height("80%")Flex({ direction: FlexDirection.Row, alignItems: ItemAlign.Start, justifyContent: FlexAlign.Center }) {Text("拖动小球").fontSize(16)}.width("100%")Row() {Text('点击位置: [x: ' + Math.round(this.positionX) + ', y:' + Math.round(this.positionY) + ']').fontSize(16)}.padding(10).width("100%")}.height('100%').width('100%')}
}

请添加图片描述

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

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

相关文章

评估方法:CMMI/能力成熟度模型集成

一、什么是CMMI CMMI,全称为Capability Maturity Model Integration,即能力成熟度模型集成。它是由美国卡内基梅隆大学软件工程研究所研发的过程改进模型,也是国际上用于评价软件企业能力成熟度的一项重要标准。 CMMI的目的是帮助软件企业对…

中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第一套(完善程序题)

CCF认证CSP-J入门组模拟测试题第一套 三、完善程序题 第一题 九宫格 请完善下面的程序,将1~9个数字分别填人3x3的九宫格中,第一行的三个数字组成一个三位数。要使第二行的三位数是第一行的2倍,第三行的三位数是第一行的3倍且每个格子里的数字都不能重复,现在要求输出所有的填…

视觉slam十四讲学习笔记(四)相机与图像

理解理解针孔相机的模型、内参与径向畸变参数。理解一个空间点是如何投影到相机成像平面的。掌握OpenCV的图像存储与表达方式。学会基本的摄像头标定方法。 目录 前言 一、相机模型 1 针孔相机模型 2 畸变 单目相机的成像过程 3 双目相机模型 4 RGB-D 相机模型 二、图像…

【JavaEE】网络原理: UDP协议和TCP协议的相关内容

目录 1. 应用层 2. 传输层 2.1 端口号 2.2 UDP协议 2.3 TCP协议 1.确认应答 2.超时重传 3.连接管理 三次握手 四次挥手 状态转换 4.滑动窗口 5.流量控制 6.拥塞控制 7.延迟应答 8.捎带应答 9.面向字节流 粘包问题 10.异常情况 网络通信中, 协议是一个非常重…

第二十九回 施恩三入死囚牢 武松大闹飞云浦-分布式版本控制系统Git使用

武松要蒋门神答应三件事:离开快活林、东西都归还施恩,公开对施恩赔礼道歉,不许在孟州住。蒋门神不得已都答应了,灰溜溜地离开了孟州城。 一个月之后,天气转凉,张都监调武松到孟州城,做了他的亲…

统计图饼图绘制方法(C语言)

统计图饼图绘制方法(C语言) 常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。 前几类图比较容易绘制,饼图绘制较难。今值此介绍饼图的绘制方法。 本方法采用C语言的最基本功能: ( 1.&#xff09…

《Docker极简教程》--Docker容器--Docker容器的概念

一、Docker容器的基本概念 1.1 Docker容器是什么? Docker容器是一种轻量级、可移植的虚拟化技术,用于打包、运输和运行应用程序及其所有依赖项。它利用Linux内核的特性(如命名空间和控制组)来提供隔离性和资源管理,使…

数据结构在JavaScript中的体现

一.概述 数据结构是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法,其实算法并不是一个很高级的东西,它充斥在每一种代码组织方式中;而且各种语言关于数据结构方面的内容都是大同小异的&…

【复现】某某ERP 信息泄露漏洞_49

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 该ERP基于SpringBoot框架和SaaS模式,立志为中小企业提供开源好用的ERP软件,目前专注进销存财务生产功能。…

python制作比大小的程序

这个程序是为了学龄前儿童设计的,规则如下 随机生成两个数,每个数都不相同 第一个数大输入1,第二个数大输入2 代码如下 import random while True: var1random.randint(0,30) var2random.randint(0,30) print(&q…

七天入门大模型 :LLM大模型基础知识最全汇总

七天入门LLM大模型学习 旨在帮助初学者理解和学习LLM的基础概念和实践。 未来七天,我将每天为大家推出一篇课程内容,感兴趣的小伙伴们可关注我们 文章目录 技术交流群用通俗易懂方式讲解系列基础模型研究模型定制新范式LLM类型介绍多模态模型Agent模型C…

【MySQL】待修改

外键约束 含义 外键:用来让两张表的数据之间建立连接,从而保证数据的完整性和一致性。 员工表emp(子表) idnameagejobsalaryentrydatemanageriddept_id1金庸66总裁200002000-01-01null52张无忌20项目经理125002005-12-05113杨…

C++STL案例:评委打分

功能要求: 利用C中的STL功能模拟10个评委为5位选手打分的过程。去掉一个最高分,去掉一个最低分,对剩下的数据取平均分即为该选手的最终得分。 本案例中将用随机数模拟评委打分,实际应用中可以修改为输入评委的分数。 代码实现&…

Java解决删除字符使频率相同问题

Java解决删除字符使频率相同问题 01 题目 给你一个下标从 0 开始的字符串 word ,字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符,使得 word 中剩余每个字母出现 频率 相同。 如果删除一个字母后,word 中剩余所有字母…

定点整数的表示范围

原码整数表示范围: − ( 2 n − 1 ) ≤ x ≤ 2 n − 1 原码整数表示范围:-(2^n-1)\le x \le 2^n-1 原码整数表示范围:−(2n−1)≤x≤2n−1 补码整数表示范围: − 2 n ≤ x ≤ 2 n − 1 【比原码多表示 − 2 n 】 补码整数表示范围…

lv15 平台总线驱动开发——ID匹配 3

一、ID匹配之框架代码 id匹配(可想象成八字匹配):一个驱动可以对应多个设备 ------优先级次低(上一章名称匹配只能1对1) 注意事项: device模块中,id的name成员必须与struct platform_device中…

C语言系列3——流程控制:条件语句与循环结构

目录 写在开头1. if语句的应用与语法解析2. switch语句的使用技巧3. for与while循环的比较与实际运用3.1 for循环的使用3.2 while循环的使用3.3 比较与实际运用 4. 练习题目4.1 题目介绍4.2 参考答案 写在最后 写在开头 在程序设计中,流程控制结构是至关重要的&…

猫头虎分享已解决Bug || ValueError: No gradients provided for any variable

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

2019年通信工程师初级 实务 真题

文章目录 一、第9章 通信动力与环境通信电源系统的主要功能:“供”、“配”、“储”、“发”、“变” 二、第2章 传输网三、第3章 接入网四、第4章 互联网 一、第9章 通信动力与环境 【问题一】 网络通信设备对动力与环境的质量要求可以归纳为 (1&#…

计算机服务器中了360后缀勒索病毒怎么办?360后缀勒索病毒处理流程

网络技术的不断应用与发展,为企业的生产运营提供了有利保障,越来越多的企业走向数字化办公模式,并且企业的发展离不开数据支撑,重视数据安全成为了众多企业关心的主要话题。春节前后,云天数据恢复中心接到很多企业的求…