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

华为 HarmonyOS NEXT 原生应用开发: 动画的基础使用(属性、显示、专场)动画

2024年11月5日 LiuJinTao

文章目录

  • 鸿蒙中动画的使用
      • 一、属性动画 - animation
          • 属性动画代码示例
      • 二、显示动画 - AnimateTo
      • 三、专场动画

鸿蒙中动画的使用

一、属性动画 - animation

在这里插入图片描述

属性动画代码示例
/*** 属性动画的演示*/
@Entry
@Component
struct Index {@State selfWidth: number = 20@State setId: number = 0build() {Column() {Text("HarmonyOS NEXT").fontWeight(FontWeight.Bold).fontSize(this.selfWidth).textAlign(TextAlign.Center).animation({// 动画事件duration: 900,// 动画曲线// curve: Curve.Linear,curve: "cubic-bezier(1.00, -0.18, 1.00, -0.33)",// 延迟时间delay: 500,// 执行次数  (-1 无限次)iterations: 2,// 播放模式playMode: PlayMode.Alternate})Button("放大").onClick(() => {// 这里通过定时器实现动画效果(20毫秒动一下,产生视觉效果!)this.setId = setInterval(() => {if (this.selfWidth < 50) {this.selfWidth++} else {clearInterval(this.setId)  //  关闭定时器}}, 30)})Button("缩小").onClick(() => {// 当 animation 发现该组件属性发生变化,就会执行 animation属性动画 (这里我们改变字体大小)this.selfWidth = 20})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}
}

二、显示动画 - AnimateTo

在这里插入图片描述

/***  显示动画的演示*/
@Entry
@Component
struct Index {@State selfWidth: number = 20@State setId: number = 0build() {Column() {Text("HarmonyOS NEXT").fontWeight(FontWeight.Bold).fontSize(this.selfWidth).textAlign(TextAlign.Center)Button("放大").onClick(() => {// 这里通过定时器实现动画效果(20毫秒动一下,产生视觉效果!)this.setId = setInterval(() => {if (this.selfWidth < 50) {this.selfWidth++} else {clearInterval(this.setId)  //  关闭定时器}}, 30)})Button("缩小").onClick(() => {animateTo({// 这里可以写  animation 中的所有配置duration: 900,} , () => {// 事件触发,这里执行的事件逻辑都会通过动画形式呈现//  和 animation比较,这个比较专一,控制字体大小就只会呈现字体大小动画this.selfWidth = 20})})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}
}

三、专场动画

在这里插入图片描述

  • Index
import { router } from '@kit.ArkUI'@Entry
@Component
struct Index  {build() {Column() {Column() {Image($r("app.media.startIcon")).width(100).aspectRatio(1)// 分别绑定该属性,且id值一样,通过路由跳转实现专场动画效果.sharedTransition("sharedID", {duration: 350})Button("跳转").onClick(() => {router.pushUrl({url: "pages/Index2"})})}}.width("100%").height("100%").justifyContent(FlexAlign.Center)}
}
  • Index2
import { router } from '@kit.ArkUI';@Entry
@Component
struct Index2 {@State message: string = 'Hello World';build() {Column() {Image($r("app.media.startIcon")).width("100%").height(400)// 分别绑定该属性,且id值一样,通过路由跳转实现专场动画效果.sharedTransition("sharedID", {duration: 350})Button("返回").onClick(() => {router.pushUrl({url: "pages/Index"})})}.height('100%').width('100%').justifyContent(FlexAlign.SpaceBetween)}
}

http://www.mrgr.cn/news/66342.html

相关文章:

  • SDL环境搭建
  • 配置本地策略路由示例
  • Redis-“自动分片、一定程度的高可用性”(sharding水平拆分、failover故障转移)特性(Sentinel、Cluster)
  • qt QStatusBar详解
  • gunicorn
  • el-table 滚动条重置 手动控制滚动条
  • 从零开始的LeetCode刷题日记:746. 使用最小花费爬楼梯
  • 十月末
  • Nginx配置文件编写示例
  • Java中查找与排序算法探究
  • 阿里云服务器 篇十(加更):自动定时备份CSDN博客内容:优化内存和解决图片展示等问题
  • 5分钟上手 Kubernetes:精简实用的 Kubectl 命令速查宝典!
  • 【ESP32+MicroPython】热点模式及网页控制
  • 产品增长之付费推广
  • 光伏设计软件如何快速上手?
  • 【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)
  • 模拟实现C库函数~
  • 【OJ题解】在字符串中查找第一个不重复字符的索引
  • 华为HarmonyOS借助AR引擎帮助应用实现虚拟与现实交互的能力5-识别平面语义
  • 【LeetCode】【算法】146. LRU缓存
  • Python学习笔记-生成器的应用与原理
  • 好看的超清4K视频素材去哪儿找?下载素材资源网站推荐
  • AI大模型重塑软件开发:流程、优势、挑战与展望
  • 「C/C++」C/C++标准库 之 #include<cctype> 字符分类处理库
  • 牛客周赛 66 F 小苯的字符提前
  • 进程的调度(超详细解读)