当前位置: 首页 > news >正文

「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 - 自定义动画实现

相关文章:

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

高级动画可以显著提升用户体验&#xff0c;为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画&#xff0c;包括弹性动画、透明度渐变和旋转缩放组合动画等示例。 关键词 高级动画弹性缓动自动动画缓动曲线 一、Animation 组件的高级缓动曲线 缓动曲线&#…...

pgsql数据量大之后可能遇到的问题

当 PostgreSQL 数据量增大时&#xff0c;可能会遇到以下问题&#xff1a; 查询性能下降&#xff1a;随着数据量的增加&#xff0c;查询可能会变得缓慢&#xff0c;尤其是在没有适当索引的情况下。大量的数据意味着更多的行需要被扫描和过滤&#xff0c;这会显著增加查询执行时间…...

Android 解决MTK相机前摄镜像问题

很莫名其妙的&#xff0c;前摄默认镜像&#xff0c;原来是为了前摄拍字体正确显示&#xff0c;比如自拍&#xff0c;前摄拍摄的人像虽左右镜像了&#xff0c;但如果后面有字牌显示&#xff0c;字体会显示正常而不是翻转。但现在需求是满足普遍的前摄原生代码不带镜像修改&#…...

在 Oracle 数据库中,SERVICE_NAME 和 SERVICE_NAMES 有什么区别?

在 Oracle 数据库中&#xff0c;SERVICE_NAME 和 SERVICE_NAMES 是两个相关的但略有不同的概念。它们都用于标识数据库服务&#xff0c;但使用场景和作用有所不同。下面详细解释这两个概念的区别&#xff1a; SERVICE_NAME 1. 定义&#xff1a; SERVICE_NAME 是一个单一的、…...

【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 引入&#xff1a; 一&#xff1a;Maven插件的安装 1&#xff1a;环境准备 2&#xff1a;创建项目 二…...

AIGC时代LaTeX排版的应用、技巧与未来展望

文章目录 一、LaTeX简介与基础设置二、常用特殊符号与公式排版三、图片与表格的插入与排版四、自动编号与交叉引用五、自定义命令与样式六、LaTeX在AIGC时代的应用与挑战七、LaTeX的未来展望《LaTeX 入门实战》内容简介作者简介目录前言/序言读者对象本书内容充分利用本书 在AI…...

二叉树的深搜

前言&#xff1a; 本章节更深入学习递归 计算布尔二叉树的值 思路&#xff1a; 1.函数头设计&#xff1a;dfs&#xff08;root&#xff09; 2.函数体&#xff1a;需要一个接收left 和 right 的值 并且根据root的值进行比较 3.递归出口&#xff1a;很明显 当为叶子节点的时候…...

JUC笔记之ReentrantLock

ReentrantLock 相对于synchronized它具备如下特点 可中断 可以设置超时时间 可以设置为公平锁 支持多个条件变量(多个wait set,不同于synchronized的wait set,ReentrantLock的wait set在同一条件下notify才能唤醒WATING状态的线程) 与synchronized一样,都支持可重入 …...

【含文档】基于ssm+jsp的图书管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: apache tomcat 主要技术: Java,Spring,SpringMvc,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定义了两个…...

pytorch知识蒸馏测试

import torch from torch import nn,optim import torch.utils import torch.utils.data import torch.utils.data.dataloader from torchvision import transforms,datasets...

mutable用法

mutable 关键字用于允许类的某个成员变量在 const 成员函数中被修改。通常&#xff0c;const 成员函数不能改变对象的任何成员变量&#xff0c;但将成员变量声明为 mutable 可以例外 class Hero { public:Hero():m_Hp(0), m_getHpCounter(0){}int getHp() const {m_getHpCounte…...

SQL语言基础

SQL(Struct Query Language)是结构化查询语言的简称&#xff0c;是一种在关系型数据库中定义和操纵数据的标准语言。 不要使用面向对象的思想学习SQL&#xff0c;因为它不是面向对象的语言目标 SQL语言简介(了解)从数据库数据检索数据(重点)子查询(重点)Oracle常用函数(掌握) …...

在USB电源测试中如何降低测试成本?-纳米软件

USB 电源模块在现代电子设备中广泛应用&#xff0c;其性能的稳定性和可靠性至关重要。然而&#xff0c;测试 USB 电源模块的成本可能会很高&#xff0c;这对于企业和研发机构来说是一个重要的问题。因此&#xff0c;寻找降低 USB 电源模块测试成本的方法具有重要的现实意义。 降…...

springboot - 定时任务

定时任务是企业级应用中的常见操作 定时任务是企业级开发中必不可少的组成部分&#xff0c;诸如长周期业务数据的计算&#xff0c;例如年度报表&#xff0c;诸如系统脏数据的处理&#xff0c;再比如系统性能监控报告&#xff0c;还有抢购类活动的商品上架&#xff0c;这些都离不…...

一篇文章理解CSS垂直布局方法

方法1&#xff1a;align-content: center 在 2024 年的 CSS 原生属性中允许使用 1 个 CSS 属性 align-content: center进行垂直居中。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewpo…...

SpringBoot day 1105

ok了家人们&#xff0c;今天继续学习spring boot&#xff0c;let‘s go 六.SpringBoot实现SSM整合 6.1 创建工程&#xff0c;导入静态资源 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</…...

MySQL 完整教程:从入门到精通

MySQL 完整教程&#xff1a;从入门到精通 MySQL 是一个广泛使用的关系型数据库管理系统&#xff0c;它使用结构化查询语言 (SQL) 来管理和操作数据。本文将详细介绍 MySQL 的基本概念、安装与配置、常用 SQL 语法、数据表的创建与管理、索引、视图、存储过程、触发器等高级特性…...

【贝叶斯公式】贝叶斯公式、贝叶斯定理、贝叶斯因子,似然比

一、是什么&#xff1f; 贝叶斯公式的本质在于它提供了一种在已有知识的基础上更新和调整我们对事件的信念的方式。具体来说&#xff0c;贝叶斯公式描述了后验概率&#xff08;即在观察到某些证据后更新的概率&#xff09;与先验概率&#xff08;即在没有观察证据之前的概率&a…...

[libos源码学习 1] Liboc协程生产者消费者举例

文章目录 1. CoRoutineEnv_t结构体用于管理协程环境 3 Liboc协程生产者消费者例子4 Liboc协程生产者消费者&#xff0c; 为什么队列不需要上锁&#xff1f;5. 两个协程访问资源不需要加队列吗5. 参考 1. CoRoutineEnv_t结构体用于管理协程环境 struct stCoRoutineEnv_t { stCo…...

Python OpenCV 图像改变

更改图像数据 通过 改像素点 或者 切片的区域 import cv2 import numpy as np img cv2.imread("image.jpg") print(img[3,5]) # 显示某位置(行3列5)的像素值( 如 [53 34 29] 它是有三通道 B G R 组成) img[3,5] (0,0,255) # 更改该位置的像素…...

DeepSeek-VL多模态模型本地部署:仅需8GB显存的量化推理方案(INT4+FlashAttention-2实测FP16精度保留98.6%)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;DeepSeek-VL多模态模型本地部署概览 DeepSeek-VL 是由深度求索&#xff08;DeepSeek&#xff09;推出的开源多模态大模型&#xff0c;支持图像理解、图文问答、视觉推理等任务。其本地部署需兼顾计算资源约束…...

老师上课没空做笔记?2026年这3款AI整理工具,下课直接梳理课堂重点

相信很多同学和我一样&#xff0c;上课最纠结的就是记笔记这件事。老师讲课节奏很快&#xff0c;知识点一环扣一环&#xff0c;一边要认真听讲、跟上课堂思路&#xff0c;一边又要低头写字&#xff0c;稍微分心就错过关键考点。遇到网课、回放课就更头疼了&#xff0c;整节课视…...

DeepSeek RAG场景下的请求倾斜难题,如何用一致性哈希+请求指纹预分流实现毫秒级负载再均衡?

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;DeepSeek RAG场景下请求倾斜的本质与影响 在 DeepSeek RAG&#xff08;Retrieval-Augmented Generation&#xff09;系统中&#xff0c;请求倾斜并非简单的流量分布不均现象&#xff0c;而是由检索模块、向量数…...

随机微分方程与网络扩散模型:模拟阿尔茨海默病病理传播的不确定性

1. 项目概述&#xff1a;当数学遇见大脑&#xff0c;为阿尔茨海默病建模作为一名长期在计算神经科学与生物统计交叉领域摸爬滚打的研究者&#xff0c;我常常思考一个问题&#xff1a;我们如何用冷冰冰的数学方程&#xff0c;去刻画像阿尔茨海默病&#xff08;AD&#xff09;这样…...

如何用QrazyBox修复损坏的二维码:终极修复工具指南

如何用QrazyBox修复损坏的二维码&#xff1a;终极修复工具指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾遇到过打印模糊、水渍污染或屏幕划痕导致的二维码无法扫描&#xff1f;…...

混合智能优化:数据驱动与约束求解在护士排班中的实践

1. 项目概述与核心挑战护士排班问题&#xff08;Nurse Scheduling Problem, NSP&#xff09;是医疗运营管理中的一块硬骨头。表面上看&#xff0c;它只是把一群护士分配到每天的各个班次上&#xff0c;但实际操作起来&#xff0c;你会发现这背后是一个由无数条规则、偏好和限制…...

macOS百度网盘终极加速方案:解锁SVIP高速下载功能

macOS百度网盘终极加速方案&#xff1a;解锁SVIP高速下载功能 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 对于macOS用户而言&#xff0c;百度网盘的…...

5大核心功能解锁Windows生产力新境界

5大核心功能解锁Windows生产力新境界 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/PowerToys 想象一下&#xff0c;你…...

三年级下册语文第八单元作文:这样想象真有趣

《这样想象真有趣》是三年级非常经典的“童话想象作文”。重点是&#xff1a;✅ 想象大胆 ✅ 故事情节有趣 ✅ 人物会说话、会行动 ✅ 最后最好有一点启发我用夸克网盘分享了「三年级下册语文作文」&#xff0c;1-8单元。链接&#xff1a;https://pan.quark.cn/s/a80b7ca7f993这…...

量子电路优化:ZX计算与强化学习的融合实践

1. 量子电路优化背景与挑战在NISQ&#xff08;Noisy Intermediate-Scale Quantum&#xff09;时代&#xff0c;量子计算机面临的最大瓶颈是量子比特的相干时间有限和门操作的高错误率。其中两比特门&#xff08;如CNOT门&#xff09;的错误率通常比单比特门高出一个数量级&…...