「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。

在这里插入图片描述


关键词
  • 高级动画
  • 弹性缓动
  • 自动动画
  • 缓动曲线

一、Animation 组件的高级缓动曲线

缓动曲线(Easing Curve)控制动画在不同阶段的速度变化,创造更自然的动画效果。鸿蒙提供了多种缓动类型,以下示例演示带有弹性效果的自动位移动画。


二、自动弹性动画

弹性动画模拟物理弹簧运动效果,以下代码展示带弹性缓动效果的左右自动位移动画。

2.1 弹性位移动画示例
@Entry
@Component
export struct ElasticAutoAnimation {@State private x: number = 0; // x 轴位置初始状态build() {Column() {// 图片组件,应用弹性缓动动画Image($r('app.media.cat')).width(305).height(360).translate({ x: this.x }) // 应用平移动画.transition({ opacity: 0.8 }) // 设置透明度过渡效果.margin(50)Button('启动弹性动画') // 按钮触发弹性动画.onClick(() => this.startElasticAnimation())}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center);}// 自动执行弹性动画的函数startElasticAnimation() {let step = 0;let amplitude = 200; // 初始弹跳幅度const interval = setInterval(() => {this.x = amplitude * Math.sin(step * Math.PI / 20); // 弹性公式实现位置更新amplitude *= 0.9; // 减小幅度step++;// 结束条件:当幅度足够小或完成足够多的步长时停止动画if (amplitude < 1) {clearInterval(interval);}}, 50); // 50ms的间隔}
}

效果示例:点击“启动弹性动画”按钮,图片会左右移动,幅度逐渐减小,形成弹性效果。

在这里插入图片描述


三、透明度渐入渐出动画

透明度的渐入渐出效果适用于页面切换或加载动画。动态调整 opacity1 属性可以实现柔和的淡入淡出效果。

3.1 自动透明度动画示例
@Entry
@Component
export struct AutoFadeAnimation {@State private opacity1: number = 1; // 透明度初始状态build() {Column() {// 图片组件,应用透明度渐变动画Image($r('app.media.cat')).width(305).height(360).opacity(this.opacity1) // 动态调整透明度.margin(50)Button('启动渐入渐出') // 按钮触发透明度动画.onClick(() => this.startFadeAnimation())}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center);}// 自动执行渐入渐出动画的函数startFadeAnimation() {setInterval(() => {this.opacity1 = this.opacity1 === 1 ? 0.2 : 1; // 在透明与不透明之间切换}, 800); // 每 800ms 切换透明度}
}

效果示例:点击“启动渐入渐出”按钮后,图片会自动在透明和不透明状态之间变化。

在这里插入图片描述


四、旋转与缩放组合动画

旋转和缩放组合动画适用于强调或引导用户注意力。以下代码展示自动旋转与缩放的组合动画。

4.1 自动旋转与缩放组合动画
@Entry
@Component
export struct RotateScaleAnimation {@State private rotation: number = 0; // 旋转角度@State private scale1: number = 1; // 缩放比例build() {Column() {// 图片组件,应用旋转与缩放动画Image($r('app.media.cat')).width(305).height(360).rotate({ angle: this.rotation }) // 应用旋转.scale({ x: this.scale1, y: this.scale1 }) // 应用缩放.transition({ opacity: 0.7 }) // 设置透明度过渡.margin(50)Button('启动旋转缩放') // 按钮触发组合动画.onClick(() => this.startRotateScaleAnimation())}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center);}// 自动执行旋转与缩放动画的函数startRotateScaleAnimation() {setInterval(() => {this.rotation += 45; // 每次增加45度旋转this.scale1 = this.scale1 === 1 ? 1.5 : 1; // 缩放比例在 1 和 1.5 之间切换}, 1200); // 每 1.2 秒切换一次}
}

效果示例:点击“启动旋转缩放”按钮后,图片会自动旋转 45 度并在两种缩放比例间切换。

在这里插入图片描述


五、综合应用:弹性缩放与透明度渐变

以下示例展示了弹性缩放与透明度渐变的组合动画,使界面效果更加丰富。

5.1 弹性缩放与渐变动画
@Entry
@Component
export struct ElasticScaleFadeAnimation {@State private scale1: number = 1; // 缩放比例@State private opacity1: number = 1; // 透明度build() {Column() {// 图片组件,应用弹性缩放和透明度渐变Image($r('app.media.cat')).width(305).height(360).scale({ x: this.scale1, y: this.scale1 }) // 应用缩放.opacity(this.opacity1) // 应用透明度.transition({ opacity: 0.5 }) // 设置透明度过渡.margin(50)Button('启动弹性缩放与渐变') // 按钮触发组合动画.onClick(() => this.startElasticScaleFade())}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center);}// 自动执行弹性缩放与渐变的函数startElasticScaleFade() {let amplitude = 1.3;const interval = setInterval(() => {this.scale1 = amplitude; // 缩放弹性效果this.opacity1 = this.opacity1 === 1 ? 0.5 : 1; // 在两种透明度之间渐变amplitude = amplitude > 1 ? 1 : 1.3; // 缩放幅度的弹性切换// 若达到目标状态则清除动画if (Math.abs(amplitude - 1) < 0.1) {clearInterval(interval);}}, 1000);}
}

效果示例:点击“启动弹性缩放与渐变”按钮后,图片会进行弹性缩放,并在透明与不透明之间渐变显示。
在这里插入图片描述


小结

本篇介绍了鸿蒙 Animation 组件的高级动画控制,通过弹性效果、渐入渐出和旋转缩放的组合,帮助开发者创建更加生动的界面效果。掌握这些技巧后,可以根据需要灵活运用,设计出高品质的动画效果。


下一篇预告

在下一篇中,我们将深入介绍自定义动画路径,实现更复杂的动画运动方式。


上一篇:「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation 组件基础
下一篇:「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现

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

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

相关文章

BFS解决拓扑排序(3)_火星词典

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 BFS解决拓扑排序(3)_火星词典 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录…

QT中使用图表之QChart绘制X轴为日期时间轴的折线图

显然X轴是日期时间轴的话&#xff0c;那么我们使用的轴类就得是QDateTimeAxis QChart中日期时间轴的精度是毫秒 因此图表里面的数据的x值需要是一个毫秒数&#xff0c;才能显示出来 --------------------------------------------------------------------------------------…

C++现代教程七之模块

优点 编译时间减少&#xff1a;模块消除了重复解析和编译头文件的需要&#xff0c;从而显著减少了编译时间。特别是在大型项目中&#xff0c;这一点尤为重要。更好的封装性&#xff1a;模块允许更严格的封装&#xff0c;可以明确地控制哪些符号对外可见。这有助于减少命名冲突和…

ML 系列:第 18 部 - 高级概率论:条件概率、随机变量和概率分布

文章目录 一、说明二、关于条件概率2.1 为什么我们说条件概率&#xff1f;2.2 为什么条件概率在统计学中很重要 三、 随机变量的定义3.1 定义3.2 条件概率中的随机变量 四、概率分布的定义五、结论 一、说明 条件概率是极其重要的概率概念&#xff0c;它是因果关系的数学表述&…

Spring @RequestMapping 注解

文章目录 Spring RequestMapping 注解一、引言二、RequestMapping注解基础1、基本用法2、处理多个URI 三、高级用法1、处理HTTP方法2、参数和消息头处理 四、总结 Spring RequestMapping 注解 一、引言 在Spring框架中&#xff0c;RequestMapping 注解是构建Web应用程序时不可…

Nginx简单安装

nginx&#xff08;“engine x”&#xff09;是一个具有高性能的 http 和反向代理 的 web服务器&#xff0c;同时也是个 POP3/SMTP/IMAP代理服务器。 web服务器&#xff1a;也叫网页服务器&#xff0c;WebServer &#xff0c;主要功能是为用户提供网上信息浏览服务。 http&am…

硅谷甄选(七)属性管理模块

属性管理模块 6.1 属性管理模块的静态组件 属性管理分为上面部分的三级分类模块以及下面的添加属性部分。我们将三级分类模块单独提取出来做成全局组件 6.1.1 三级分类全局组件&#xff08;静态&#xff09; 注意&#xff1a;要在src\components\index.ts下引入。 <temp…

完美日记营销模式对开源 AI 智能名片 2 + 1 链动模式 S2B2C 商城小程序的启示

摘要&#xff1a;本文通过分析完美日记在营销中利用社会基础设施升级红利、网红与新流量平台、KOL 和私域流量等策略取得成功的案例&#xff0c;探讨其对开源 AI 智能名片 2 1 链动模式 S2B2C 商城小程序在营销推广、用户获取与留存、提升复购率等方面的启示&#xff0c;为商城…

【Hive sql 面试题】统计Top3歌单以及每个Top3歌单下的Top3歌曲(难)

表数据如下&#xff1a; 1 1 经典老歌 1 月亮代表我的心 2 1 经典老歌 1 月亮代表我的心 3 1 经典老歌 3 夜来香 4 1 经典老歌 4 我只在乎你 5 1 经典老歌 5 千言万语 6 1 经典老歌 5 千言万语 7 2 流行金曲 7 突然好想你 8 2 流行金曲 8 后来 9 2 流行金曲 9 童话 10 2 流行金…

深入剖析卷积神经网络中的卷积核

深入剖析卷积神经网络中的卷积核 前言一、卷积核的数学基础代码示例&#xff1a;简单的2D卷积操作 二、卷积核的类型与作用1. 边缘检测卷积核代码示例&#xff1a;Sobel算子 2. 模糊与平滑卷积核代码示例&#xff1a;高斯滤波器 三、卷积核的实际应用四、卷积核的初始化与学习五…

【GIT】-git常见指令

概念 远程仓库和本地仓库 常用指令&#xff1a; ls/ll查看当前目录cat查看文件内容touch创建文件vivi编辑器 备注&#xff1a; git GUI&#xff1a;是git提供的图形化工具 GIT Bash&#xff1a;Git提供的命令行工具 在安装GIT后要配置用户和账号&#xff01; 配置用户信息 …

高效实现聚水潭·奇门售后数据集成MySQL案例详解

聚水潭奇门数据集成到MySQL的技术案例分享 在现代企业的数据管理中&#xff0c;如何高效、准确地实现不同系统之间的数据对接和集成是一个关键问题。本文将聚焦于一个具体的系统对接集成案例&#xff1a;将聚水潭奇门平台的售后单数据集成到MySQL数据库中&#xff0c;方案名称…

软件测试八股文个人总结

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 前面看到了一些面试题&#xff0c;总感觉会用得到&#xff0c;但是看一遍又记不住&#xff0c;所以我把面试题都整合在一起&#xff0c;都是来自各路大佬的分享&am…

python读取视频并转换成gif图片

1. 安装三方库 moviepy 将视频转换成gif&#xff0c;需要使用 moviepy库 确保已经安装了moviepy库 pip install moviepy2. 代码实现&#xff1a; from moviepy.editor import VideoFileClipmyclip VideoFileClip("video.mp4") myclip2 myclip.subclip(0, 10).re…

k8s部署redis远程连接示例

一、环境 节点 IP 服务 master 192.168.126.46 docker、kubeadm、kubelet、kubectl、flannel、telnet node1 192.168.126.47 docker、kubeadm、kubelet、kubectl、flannel、telnet node2 192.168.126.48 docker、kubeadm、kubelet、kubectl、flannel、telnet ubunt…

UI自动化测试 —— CSS元素定位实践!

前言 自动化测试元素定位是指在自动化测试过程中&#xff0c;通过特定的方法或策略来准确识别和定位页面上的元素&#xff0c;以便对这些元素进行进一步的操作或断言。这些元素可以是文本框、按钮、链接、图片等HTML页面上的任何可见或不可见的组件。 在自动化测试中&#xf…

【含开通报告+文档+源码】基于SpringBoot的新能源充电桩管理系统的设计与实现

开题报告 近年来&#xff0c;随着全球对环境问题的关注和新能源汽车的普及&#xff0c;新能源充电桩的需求显著增加[1]。为了满足大量新能源车辆的充电需求&#xff0c;各地纷纷建设新能源充电桩站点。然而&#xff0c;随着充电桩数量的增加&#xff0c;管理和运营充电桩也面临…

Unity引擎材质球残留贴图引用的处理

大家好&#xff0c;我是阿赵。   这次来分享一下Unity引擎材质球残留贴图引用的处理 一、 问题 在使用Unity调整美术效果的时候&#xff0c;我们很经常会有这样的操作&#xff0c;比如&#xff1a; 1、 同一个材质球切换不同的Shader、 比如我现在有2个Shader&#xff0c;…

一行代码实现垂直居中

实现元素垂直居中的方案有很多&#xff0c;比如定位、伸缩盒子、行高等等。 但在 2024 年的Chrome 123 版本中&#xff0c; CSS 原生可以使用 1 个 CSS 属性 align-content: center进行垂直居中。 如何使用 <!DOCTYPE html> <html lang"en"> <head&…

云计算作业一

目录 0. 前置准备 0.1 安装虚拟机 0.2 Linux统一设置 1. Hadoop安装配置 1.1 环境准备 1.2 Hadoop伪分布式安装 1.3 Hadoop集群安装 2. HDFS实验&#xff0c;包括Shell命令操作和Java接口访问 2.1 HDFS操作命令 2.2 通过Java项目访问HDFS 2.3 使用winutils解决警告信…