「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation 组件基础

在应用开发中,动画效果可以增强用户体验。鸿蒙框架提供了 translatescalerotate 等动画功能,允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。

在这里插入图片描述


关键词
  • Animation 组件
  • 动画效果
  • 位置动画
  • 自动动画
  • 缩放动画

一、Animation 组件概述

鸿蒙的 Animation 组件支持多种动画效果,如平移、缩放和旋转。通过动态控制这些属性的变化,可以实现组件在界面中的流畅动画效果。以下实例演示这些基础动画的实现。


二、创建简单动画
2.1 自动位移动画

通过 translate 属性实现组件的自动平移效果,可以控制 xy 轴的偏移量,使组件自动左右或上下移动。定时器可用于定期触发动画。

@Entry
@Component
export struct AutoTranslateAnimation {@State private x: number = 0build() {Column() {// 图片组件,应用平移动画Image($r('app.media.cat')).width(305).height(360).translate({ x: this.x }) // 根据 x 状态变量实现水平平移.transition({ opacity: 0.5 }) // 设置透明度过渡效果Button('开始自动移动').onClick(() => this.startAutoMove()) // 按钮开始自动动画}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)}// 定义自动平移函数startAutoMove() {setInterval(() => {this.x = this.x === 0 ? 200 : 0; // 切换位置}, 1000); // 每1秒切换位置,实现自动平移}
}

效果示例:点击“开始自动移动”按钮后,图片每隔 1 秒在 x 轴上来回移动。

在这里插入图片描述


2.2 自动缩放动画

通过 scale 属性设置组件的自动缩放比例,控制 xy 轴的比例可以实现放大或缩小效果。

@Entry
@Component
export struct AutoScaleAnimation {@State private scale1: number = 1build() {Column() {// 图片组件,应用缩放动画Image($r('app.media.cat')).width(305).height(360).scale({ x: this.scale1, y: this.scale1 }) // 根据 scale1 实现缩放效果.transition({ opacity: 0.8 }) // 设置透明度过渡效果.margin(50)Button('开始自动缩放').onClick(() => this.startAutoScale()) // 按钮开始自动缩放动画}.width('100%').height('100%')}// 定义自动缩放函数startAutoScale() {setInterval(() => {this.scale1 = this.scale1 === 1 ? 1.5 : 1; // 切换缩放比例}, 1000); // 每1秒切换缩放,实现自动缩放}
}

效果示例:点击“开始自动缩放”按钮后,图片每隔 1 秒在 1 倍和 1.5 倍之间切换。

在这里插入图片描述


2.3 自动旋转动画

通过 rotate 属性控制组件的旋转角度,结合定时器可以实现自动旋转效果。

@Entry
@Component
export struct AutoRotateAnimation {@State private rotation: number = 0build() {Column() {// 图片组件,应用旋转动画Image($r('app.media.cat')).width(305).height(360).rotate({ angle: this.rotation }) // 根据 rotation 实现旋转效果.transition({ opacity: 0.8 }) // 设置透明度过渡效果.margin(50)Button('开始自动旋转').onClick(() => this.startAutoRotate()) // 按钮开始自动旋转动画}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)}// 定义自动旋转函数startAutoRotate() {setInterval(() => {this.rotation += 45; // 每次增加45度实现旋转}, 1000); // 每1秒旋转一次}
}

效果示例:点击“开始自动旋转”按钮后,图片每隔 1 秒顺时针旋转 45 度。

在这里插入图片描述


三、组合自动动画示例

可以通过同时控制 translatescalerotate 属性,实现多个动画效果的自动组合,创建更复杂的视觉效果。

@Entry
@Component
export struct AutoCombinedAnimationComponent {@State private x: number = 0@State private scale1: number = 1@State private rotation: number = 0build() {Column() {// 图片组件,应用组合动画效果Image($r('app.media.cat')).width(305).height(360).translate({ x: this.x }) // 平移.scale({ x: this.scale1, y: this.scale1 }) // 缩放.rotate({ angle: this.rotation }) // 旋转.transition({ opacity: 0.8 }) // 设置透明度过渡效果.margin(50)Button('开始自动组合动画').onClick(() => this.startAutoCombinedAnimation()) // 按钮触发自动组合动画}.width('100%').height('100%').alignItems(HorizontalAlign.Center).justifyContent(FlexAlign.Center)}// 定义自动组合动画函数startAutoCombinedAnimation() {setInterval(() => {this.x = this.x === 0 ? 50 : 0; // 切换位置this.scale1 = this.scale1 === 1 ? 1.5 : 1; // 切换缩放比例this.rotation += 45; // 每次增加旋转角度}, 1000); // 每1秒切换动画效果}
}

效果示例:点击“开始自动组合动画”按钮后,图片将每隔 1 秒自动产生平移、缩放和旋转的组合动画效果。
在这里插入图片描述


小结

本篇介绍了鸿蒙 Animation 组件的基础用法,并通过多个实例展示了 translatescalerotate 等动画效果的实现。通过合理运用这些基础动画,可以轻松创建自动化的动画效果,让界面更加生动有趣。


下一篇预告

下一篇将深入探讨高级动画效果和缓动控制,学习如何创建更自然的动画效果,进一步提升界面表现力。


上一篇: 「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List 和 Grid 组件展示数据列表
下一篇: 「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制

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

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

相关文章

2024年一带一路金砖技能大赛之大数据容器云开发

10.31备赛准备 C模块,大数据应用开发 1.前端Vue----请求服务端api接口json数据-----展示/图表 2.Node.js实现后端开发,为前端vue提供接口数据 3.部署在docker中 官方技能需求 创建vue框架项目 1、安装node.js(https://nodejs.org/zh-cn/d…

C++ 内存对齐:alignas 与 alignof

一、什么是内存对齐? 内存对齐是指数据在内存中按照特定的字节边界存储。一般情况下,处理器从内存读取数据时会更高效地读取对齐的数据。如果数据未对齐,处理器可能需要进行额外的内存访问,导致性能下降。对于某些平台&#xff0…

嵌入式linux系统中串口驱动框架分析

大家好,今天主要给大家分享一下,如何使用linux系统中的串口实现。 第一:串口基本简介 串口是很常见的一个外设,在Linux下通常通过串口和其他设备或传感器进行通信。根据电平的不同,串口可以分为TTL和RS232。不管是什么样的电平接口,驱动程序是一样的。 第二:Linux下UAR…

MongoDB 8.0.3版本安装教程

MongoDB 8.0.3版本安装教程 一、下载安装 1.进入官网 2.选择社区版 3.点击下载 4.下载完成后点击安装 5.同意协议,下一步 6.选择第二个Custon,自定义安装 7.选择安装路径 !记住安装路径 8.默认,下一步 9.取…

【力扣专题栏】面试题 01.02. 判定是否互为字符重排,如何利用数组模拟哈希表解决两字符串互排问题?

题解目录 1、题目描述解释2、算法原理解析3、代码编写(1)、两个数组分别模拟哈希表解决(2)、利用一个数组模拟哈希表解决问题 1、题目描述解释 2、算法原理解析 3、代码编写 (1)、两个数组分别模拟哈希表解决 class Solution { public:bool CheckPermutation(string s1, stri…

测长机在测量长度尺寸方面有哪些优势?如何保证测量的准确性?

测长机在测量长度尺寸方面具有以下优势: 一、高精度 1.分辨力高: 测长机通常具有很高的分辨力,能够精确测量到非常小的长度变化。例如,一些高精度测长机的分辨力可以达到微米甚至纳米级别,能够满足对精密工件和高精度…

人脑与机器连接:神经科技的伦理边界探讨

内容概要 在当今科技飞速发展的时代,人脑与机器连接已成为一个引人注目的前沿领域。在这一背景下,神经科技的探索为我们打开了一个全新的世界,从脑机接口到人工智能的飞跃应用,不仅加速了技术的进步,更触动了我们内心…

kd树的原理简述

1️⃣定义:给定一个二叉树与点集 P { x 1 , x 2 , . . . , x N } ⊆ R 2 P\{x_1,x_2,...,x_N\}\subseteq{}\mathbb{R}^2 P{x1​,x2​,...,xN​}⊆R2 对应关系: { 叶结点 i ↔ 一一对应 点 x i 中间结点 u ↔ 一多对应 以 u 为根子树的叶结点 ( P u ) ↔…

liunx CentOs7安装MQTT服务器(mosquitto)

查找 mosquitto 软件包 yum list all | grep mosquitto出现以上两个即可进行安装,如果没有出现则需要安装EPEL软件库。 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm查看 mosquitto 信息 yum info mosquitto安装 mosquitt…

Qt Designer客户端安装和插件集(pyqt5和pyside2)

GitHub - PyQt5/QtDesignerPlugins: Qt Designer PluginsQt Designer Plugins. Contribute to PyQt5/QtDesignerPlugins development by creating an account on GitHub.https://github.com/PyQt5/QtDesignerPlugins 一、下载客户端 https://github.com/PyQt5/QtDesigner/rel…

操作系统进程的描述与控制习题

1.什么是前趋图?为什么要引入前趋图? 前趋图(Precedence Graph)是一个有向无循环图,记为DAG(DirectedAcyclic Graph) 用于描述进程之间执行的前后关系 2.画出下面四条语句的前趋图 S1 a: x y; S2 b: z 1; S3 c: a - b; S4 w: c 1;3.什么程序并发执行…

第三十一章 Vue之路由(VueRouter)

目录 一、引言 1.1. 路由介绍 二、VueRouter 三、VueRouter的使用 3.1. 使用步骤(52) 3.2. 完整代码 3.2.1. main.js 3.2.2. App.vue 3.2.3. Friend.vue 3.2.4. My.vue 3.2.5. Find.vue 一、引言 1.1. 路由介绍 Vue中路由就是路径和组件的映…

精准选型跨境客服,网页服务更高效

跨境网页客服系统选型需考虑语言、功能、友好性及合规性。ZohoSalesIQ凭多语言支持、友好界面、移动兼容及数据保障成为优选,助力企业提升客户体验、高效沟通并满足数据安全需求。 一、跨境网页客服系统的重要性 1、提升客户体验 在跨境电商中,客户体验…

Pinia-状态管理

Pinia-状态管理 特点: 1. 轻量和模块化 Pinia 是一个轻量级的状态管理库,支持模块化管理,即可以将应用的状态分成多个 store 以实现更好的组织。使用 Pinia,可以定义多个 store,每个 store 都是一个独立的模块&#x…

【C++】对左值引用右值引用的深入理解(右值引用与移动语义)

🌈 个人主页:谁在夜里看海. 🔥 个人专栏:《C系列》《Linux系列》 ⛰️ 天高地阔,欲往观之。 ​ 目录 前言:对引用的底层理解 一、左值与右值 提问:左值在左,右值在右?…

go 聊天系统项目-1

1、登录界面 说明:这一节的内容采用 go mod 管理【GO111MODULE‘’】模块,从第二节开始使用【GO111MODULE‘off’】GOPATH 管理模块。具体参见 go 包相关知识 1.1登录界面代码目录结构 代码所在目录/Users/zld/Go-project/day8/chatroom/ 1.2登录界…

Balluff EDI 项目需求分析

电子数据交换(EDI,Electronic Data Interchange)是一种通过电子方式在不同组织之间交换商业文档的技术和标准。它涉及使用标准格式的电子文档,如订单、发票、运输单据等,以实现自动化的数据传输。这种技术通常依赖于专…

如何在 Ubuntu 上安装和配置 GitLab

简介 GitLab是一个开源应用程序,主要用于托管 Git 仓库,并提供与开发相关的附加功能(如问题跟踪)。GitLab 可由用户自己的基础架构托管,可灵活部署为开发团队的内部存储库、与用户对接的公共方式或供稿者托管自己项目…

c语言-常量和变量

文章目录 一、常量是什么?(1)整型常量:(2)实型常量:(3)字符常量:(4)字符串常量(5)地址常量 二、define 和 con…

【Linux】进程间通信(匿/命名管道、共享内存、消息队列、信号量)

文章目录 1. 进程通信的目的2. 管道2.1 原理2.2 匿名管道2.3 管道通信场景:进程池2.4 命名管道 3. System V共享内存3.1 操作共享内存3.2 使用共享内存通信 4. System V 消息队列(了解)5. System V 信号量(了解)5.1 信…