鸿蒙开发-UI-动画-弹簧曲线动画

鸿蒙开发-UI-组件导航-Navigation

鸿蒙开发-UI-组件导航-Tabs

鸿蒙开发-UI-图形-图片

鸿蒙开发-UI-图形-绘制几何图形

鸿蒙开发-UI-图形-绘制自定义图形

鸿蒙开发-UI-图形-页面内动画

鸿蒙开发-UI-图形-组件内转场动画

文章目录

前言

一、基本概念

二、弹簧曲线动画实现

1.使用springCurve

2.使用springMotion和responsiveSpringMotion

总结


前言

上文细学习了鸿蒙开发UI组件内转场动画,了解转场的概念,学习在if/else,foreach场景下如何结合transition和animateTo实现组件的转场动画效果,本文将学习弹簧曲线动画。

一、基本概念

ArkUI提供预置动画曲线,指定动画属性从起始值到终止值变化规律,如Linear、Ease、EaseIn等。ArkUI也提供了由弹簧振子物理模型产生的弹簧曲线。通过弹簧曲线,开发者可以设置超过设置的终止值,在终止值附近震荡,直至最终停下来的效果。弹簧曲线的动画效果比其他曲线具有更强的互动性、可玩性。

二、弹簧曲线动画实现

1.使用springCurve

接口

//构造参数:构建时,可指定质量为1,根据调节刚度、阻尼两个参数,达到想要的震荡效果。
//velocity: 初速度,
//mass: 弹簧系统的质量
//stiffness: 刚度
//damping: 阻尼
springCurve(velocity: number, mass: number, stiffness: number, damping: number)

代码示例

//step1: 引入curves依赖
import curves from '@ohos.curves';
@Entry
@Component
struct SpringTest {@State translateX: number = 0;private jumpWithSpeed(speed: number) {this.translateX = -1;
//step3:配合translate,闭包中控制button组件位移变化,并指定初速度进行x方向的平移的弹簧动画animateTo({ duration: 2000, curve: curves.springCurve(speed, 1, 1, 1.2) }, () => {this.translateX = 0;})}build() {Column() {Button("button").fontSize(14).width(100).height(50).margin(30)
//step2: 定义button组件的内转动画样式.translate({ x: this.translateX })Row({space:50}) {Button("jump 50").fontSize(14).onClick(() => {
//step4: 以初速度50的弹簧曲线进行平移this.jumpWithSpeed(50);})Button("jump 200").fontSize(14).onClick(() => {
//step5: 以初速度200的弹簧曲线进行平移this.jumpWithSpeed(200);})}.margin(30)}.height('100%').width('100%')}
}

注:

1.速度只是放大了振荡的效果,不决定能否产生震荡

2.刚度越小、阻尼越大,springCurve的“弹性”越弱,振荡效果越弱

3.刚度减小或阻尼变大,达到过阻尼状态后,无论速度为多大,都不会有在终点值附近振荡的效果

2.使用springMotion和responsiveSpringMotion

springMotion接口

//response: 簧自然振动周期
//dampingFraction: 阻尼系数
//overlapDuration: 弹性动画衔接时长
springMotion(response?: number, dampingFraction?: number, overlapDuration?: number)

responsiveSpringMotion接口

//response: 簧自然振动周期
//dampingFraction: 阻尼系数
//overlapDuration: 弹性动画衔接时长
responsiveSpringMotion(response?: number, dampingFraction?: number, overlapDuration?: number)

代码示例

//step1: 引入curves依赖
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.Blue).position({ x: this.positionX, y: this.positionY }).onTouch((event: TouchEvent) => {if (event.type === TouchType.Move) {
//step2: 跟手过程,使用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) {
//step3: 离手时,使用springMotion曲线,当手离开,小球弹回原来的位置animateTo({ curve: curves.springMotion() }, () => {this.positionX = 100;this.positionY = 100;console.info(`touchUp, animateTo x:100, y:100`);})}})}.width("100%").height("80%").clip(true) // 如果球超出父组件范围,使球不可见.backgroundColor(Color.Orange)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%')}
}

注:

1.使用springMotion和responsiveSpringMotion曲线时,duration不生效,适合于跟手动画

2.跟手过程推荐使用responsiveSpringMotion曲线,松手过程推荐使用springMotion曲线

3.springCurve可以设置初速度,单一属性存在多个动画时不会互相影响,观察到的是多个动画效果的叠加

4.springMotion内部有速度机制,不可由开发者设置。在单一属性存在多个动画时,后一动画会取代前一动画,并继承前一动画的速度


总结

本文细学习了鸿蒙开发UI弹性曲线动画,了解弹性曲线的概念,学习了弹性曲线两种实现方式以及使用场景,下文将学习页面间动画。

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

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

相关文章

WPF资源的继承

假设这里有一个全局的资源 <Style TargetType"TextBlock"><Setter Property"FontSize" Value"40"/> </Style> 这是时候有些控件可能需要一个样式在这个基础上加一点内容的 <Style x:Key"textBlockStyle" Targ…

移速u盘怎么恢复彻底删除的文件,移速u盘彻底删除的文件如何恢复

移速u盘怎么恢复彻底删除的文件&#xff1f;在日常使用中&#xff0c;我们经常会遇到需要删除U盘中的文件的情况。然而&#xff0c;有时候我们可能会不小心将重要的文件彻底删除&#xff0c;导致数据的丢失。对于移速U盘用户来说&#xff0c;如何恢复彻底删除的文件成为了一个备…

vacuum无法清除死行(dead rows)的原因

文章目录 1.需要执行vacuum的原因2.VACUUM存在的问题&#xff1a;表膨胀3.查找原因4.阻止vacuum清理死行的四个原因4.1 长事务:4.2 弃用的replication slot和VACUUM:4.3 孤立的prepared transactions&#xff1a;4.4 启用 hot_standby_feedback 的备用服务器(standby server) 1…

注意:腾讯云轻量应用服务器地域选择攻略,选错很麻烦!

腾讯云轻量应用服务器地域如何选择&#xff1f;地域就近选择&#xff0c;北方选北京地域、南方选广州地域&#xff0c;华东地区选上海地域。广州上海北京地域有什么区别&#xff1f;哪个好&#xff1f;区别就是城市地理位置不同&#xff0c;其他的差不多&#xff0c;不区分好坏…

AI壁纸号一周增加上千粉丝,轻松变现的成功案例分享

前言 随着AI绘画技术的发展&#xff0c;传统的互联网副业壁纸号在新的技术加持下迎来了第二春。本文将分享一位壁纸号创作者的成功案例&#xff0c;并为大家提供创作门槛和硬件要求等相关信息。 该项目的创作门槛极低&#xff0c;基本上可以由AI完成内容创作。不过&#xff0…

界面开发框架DevExpress XAF v24.1新版预告 - 跨平台应用UI(二)

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 本文中的内容概述了…

【算法积累】辗转相除法

【算法积累】辗转相除法&#xff0c;python实现两种 辗转相除法&#xff08;又称欧几里得算法&#xff09;减法&#xff08;不常用&#xff09;代码实现执行结果 辗转相除法代码实现执行结果 辗转相除法&#xff08;又称欧几里得算法&#xff09; 又称欧几里得算法&#xff0c…

使用helm部署clickhouse

&#xff08;作者&#xff1a;陈玓玏&#xff09; 前置条件 已安装 Kubernetes 集群&#xff1b; 已安装 Helm 包管理工具。 部署 1 添加 RadonDB ClickHouse 的 Helm 仓库 helm repo add ck https://radondb.github.io/radondb-clickhouse-kubernetes/ helm repo upd…

苹果Vision Pro+:医疗领域创新引领者

在数字化浪潮的推动下&#xff0c;苹果以其前沿的Vision Pro技术&#xff0c;正引领着医疗领域迈向全新的创新高峰。该公司深信&#xff0c;通过数字化技术与传统医疗领域的深度融合&#xff0c;可以创造出更多创新性和实用性的解决方案&#xff0c;为患者和医护人员带来前所未…

【算法设计】实验四回溯算法(附源代码)

这里写目录标题 一、上机目的二、上机内容与要求三、上机步骤四、上机结果1、将课本5.2节算法改为程序&#xff0c;并输入数据及进行测试&#xff1b;2、自学5.4节&#xff0c;并完成符号三角形问题。 一、上机目的 1、通过回溯法的示例程序理解回溯法的基本思想&#xff1b; …

信号处理-探索相邻数据点之间的变化和关联性的操作方法

当前值减去前一个值&#xff0c;乘上当前值与前一个值差值的绝对值 当前值减去后一个值&#xff0c;乘上当前值与后一个值差值的绝对值。 意义何在&#xff1f; 当前值减去前一个值&#xff1a;表示当前数据点与前一个数据点之间的变化量。当前值与前一个值差值的绝对值&…

Pycharm的Project Structure (项目结构)

文章目录 一、Sources二、Tests三、Exeluded四、Namespace packages五、Templates六、Resources 一、Sources 源代码根目录&#xff1a;包含项目的主要源代码&#xff0c;它会在这个目录下搜索代码&#xff0c;然后自动补全和只能提示都通过这里的代码提供。若项目运行自定义代…

luatos框架中LVGL如何使用中文字体〈二〉编写脚本设置中文字体

本节内容&#xff0c;将和大家一同学习&#xff0c;在luatos环境中&#xff0c;使用lvgl库&#xff0c;一步步的编译固件、编写脚本&#xff0c;最终实现中文字体的显示。 芯片&#xff1a;AIR101 LCD屏&#xff1a;ST7789 上一节&#xff0c;我们一同学习了&#xff0c;硬件引…

使用vue动态在列表中添加或者删除某一行

** 使用vue动态在列表中添加或者删除某一行 ** 先看一下展示的效果&#xff1a; 好了上代码&#xff1a; 样式界面&#xff1a; <template><div class"container"><h4 style"margin-left: 20px;">线路停靠站站点</h4><el-b…

无缝集成 MongoDB Relational Migrator,Tapdata 提供关系型到 MongoDB 实时迁移优化方案

在去年的 MongoDB 用户大会纽约站上&#xff0c;MongoDB 正式宣布全面推出新工具 MongoDB Relational Migrator&#xff08;MongoDB RM&#xff09;&#xff0c;用以简化应用程序迁移和转换——即从传统关系型数据模型到现代的文档数据模型&#xff0c;助力组织快速提升运营效率…

C#控制台应用程序

C#控制台应用程序时基于文本的&#xff0c;在命令行中运行。它们通常执行需要编写的脚本的简单任务&#xff0c;例如编译文件或加密配置文件的一部分。 一、向用户显示输出 控制台应用程序执行的两个最常见的任务是写入和读取数据&#xff0c;前者使用WriteLine、Write方法来…

数字图像处理 使用C#进行图像处理九 实现傅里叶变换

一、简述 傅立叶变换将图像分解为其正弦和余弦分量。换句话说,它将图像从空间域变换到频率域。这个想法是任何函数都可以用无限正弦函数和余弦函数之和来精确近似。傅里叶变换是实现此目的的一种方法。 网上有很多关于傅里叶变换的文章,这里就不进行赘述了,这里主要结合代码…

java中xml概述

1.xml 1.1概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为…

山东省各地市“专精特新”补贴奖励政策汇总

“专精特新”已成为我国经济领域的热词。国家高度重视中小企业发展&#xff0c;对“专精特新”企业的支持更是上升至国家层面。在国家政策引导下&#xff0c;各地各部门为加快培育“专精特新”企业&#xff0c;推动产业链创新链协同发展&#xff0c;采取了一系列举措&#xff0…

java中常见的设计模式以及常见的面试题

在Java中&#xff0c;常见的设计模式同样包括创建型模式、结构型模式和行为型模式。下面是一些在Java中特别常见的设计模式及其简要描述&#xff1a; 创建型模式&#xff1a; 单例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;确保一个类只有一个实例&#xff…