码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 鸿蒙HarmonyO实战-ArkUI动画(组件内转场动画)


    合集 - 鸿蒙入门实战全套(核心知识点)(30)
    1.鸿蒙HarmonyOS实战-ArkTS语言(基本语法)03-202.鸿蒙HarmonyOS实战-ArkTS语言(状态管理)03-213.鸿蒙HarmonyOS实战-ArkTS语言(渲染控制)03-214.鸿蒙HarmonyOS实战-ArkUI组件(Row/Column)03-225.鸿蒙HarmonyOS实战-ArkUI组件(Stack)03-236.鸿蒙HarmonyOS实战-ArkUI组件(Flex)03-247.鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)03-258.鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)03-269.鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)03-2710.鸿蒙HarmonyOS实战-ArkUI组件(List)03-2911.鸿蒙HarmonyOS实战-ArkUI组件(Grid/GridItem)03-2912.鸿蒙HarmonyOS实战-ArkUI组件(Swiper)03-3013.鸿蒙HarmonyOS实战-ArkUI组件(Button)04-0114.鸿蒙HarmonyOS实战-ArkUI组件(Radio)04-0215.鸿蒙HarmonyOS实战-ArkUI组件(Toggle)04-0216.鸿蒙HarmonyOS实战-ArkUI组件(Progress)04-0317.鸿蒙HarmonyOS实战-ArkUI组件(Text/Span)04-0318.鸿蒙HarmonyOS实战-ArkUI组件(TextInput/TextArea)04-0719.鸿蒙HarmonyOS实战-ArkUI组件(CustomDialog)04-0820.鸿蒙HarmonyOS实战-ArkUI组件(Video)04-0921.鸿蒙HarmonyOS实战-ArkUI组件(Popup)04-1022.鸿蒙HarmonyOS实战-ArkUI组件(Menu)04-1123.鸿蒙HarmonyOS实战-ArkUI组件(页面路由)04-1224.鸿蒙HarmonyOS实战-ArkUI组件(Navigation)04-1325.鸿蒙HarmonyOS实战-ArkUI组件(Tabs)04-1526.鸿蒙HarmonyOS实战-ArkUI组件(Image)04-1627.鸿蒙HarmonyOS实战-ArkUI组件(Shape)04-1728.鸿蒙HarmonyOS实战-ArkUI组件(Canvas)04-1829.鸿蒙HarmonyOS实战-ArkUI动画(布局更新动画)04-19
    30.鸿蒙HarmonyO实战-ArkUI动画(组件内转场动画)04-20
    收起

    🚀前言

    转场动画是一种在电影、视频和演示文稿中使用的动画效果,用于平滑地切换不同的场景或幻灯片。转场动画可以增加视觉吸引力,改善观众的观看体验。

    常见的转场动画包括淡入淡出、滑动、旋转、放大缩小等效果。这些动画效果可以在场景之间创建无缝的过渡,使观众感到自然流畅。

    在电影中,转场动画通常用于切换不同的场景或时间段。例如,一个电影可能从一个场景中的角色身上开始,然后通过淡入淡出或滑动的效果过渡到另一个场景中的不同角色。

    在视频编辑软件和演示文稿软件中,转场动画常用于创建幻灯片之间的过渡效果。这些过渡可以使幻灯片之间的切换更加流畅和有趣,从而吸引观众的注意力。

    转场动画的选择应根据媒体类型、主题和受众类型来进行,以确保动画效果与内容相匹配,并增强用户体验。

    🚀一、组件内转场动画

    转场动画的接口为:

    transition(value: TransitionOptions)
    

    transition函数的入参为组件内转场的效果,可以定义平移、透明度、旋转、缩放这几种转场样式的单个或者组合的转场效果,必须和animateTo一起使用才能产生组件转场效果。

    🔎1.transition常见用法

    在HarmonyOS中,transition(过渡)是指在UI界面的元素之间进行平滑的动画切换的一种功能。在过渡中,可以定义元素的插入、删除、移动等动画效果。TransitionType是用来指定过渡类型的枚举值,包括以下三种类型:

    1. TransitionType.All:表示在过渡中包含所有类型的动画效果,包括插入、删除和移动。当使用TransitionType.All时,所有相关元素的过渡动画都会被应用。

    2. TransitionType.Insert:表示只在过渡中包含插入类型的动画效果。当新的元素被插入到UI界面中时,使用TransitionType.Insert可以定义其出现的动画效果。

    3. TransitionType.Delete:表示只在过渡中包含删除类型的动画效果。当元素被从UI界面中删除时,使用TransitionType.Delete可以定义其消失的动画效果。

    通过使用这些过渡类型,开发者可以在HarmonyOS应用中实现更加流畅、吸引人的界面切换效果。

    Button()
      .transition({ type: TransitionType.All, scale: { x: 0, y: 0 } })
    Button()
      .transition({ type: TransitionType.Insert, translate: { x: 200, y: -200 }, opacity: 0 })
      .transition({ type: TransitionType.Delete, rotate: { x: 0, y: 0, z: 1, angle: 360 } })
    

    🔎2.if/else产生组件内转场动画

    🦋2.1 无任何动画

    @Entry
    @Component
    struct IfElseTransition {
      @State flag: boolean = true;
      @State show: string = 'show';
    
      build() {
        Column() {
          Button(this.show).width(80).height(30).margin(30)
            .onClick(() => {
              if (this.flag) {
                this.show = 'hide';
              } else {
                this.show = 'show';
              }
              // 点击Button控制Image的显示和消失
              this.flag = !this.flag;
            })
          if (this.flag) {
              Image($r('app.media.mountain')).width(200).height(200)
          }
        }.height('100%').width('100%')
      }
    }
    

    image

    🦋2.2 无任何动画

    @Entry
    @Component
    struct IfElseTransition {
      @State flag: boolean = true;
      @State show: string = 'show';
    
      build() {
        Column() {
          Button(this.show).width(80).height(30).margin(30)
            .onClick(() => {
              if (this.flag) {
                this.show = 'hide';
              } else {
                this.show = 'show';
              }
    
              animateTo({ duration: 1000 }, () => {
                // 动画闭包内控制Image组件的出现和消失
                this.flag = !this.flag;
              })
            })
          if (this.flag) {
            // Image的出现和消失配置为不同的过渡效果
            Image($r('app.media.img_2')).width(200).height(200)
              .transition({ type: TransitionType.Insert, translate: { x: 200, y: -200 } })
              .transition({ type: TransitionType.Delete, opacity: 0, scale: { x: 0, y: 0 } })
          }
        }.height('100%').width('100%')
      }
    }
    

    image

    🔎3.ForEach产生组件内转场动画

    @Entry
    @Component
    struct ForEachTransition {
      @State numbers: string[] = ["1", "2", "3", "4", "5"]
      startNumber: number = 6;
    
      build() {
        Column({ space: 10 }) {
          Column() {
            ForEach(this.numbers, (item) => {
              // ForEach下的直接组件需配置transition效果
              Text(item)
                .width(240)
                .height(60)
                .fontSize(18)
                .borderWidth(1)
                .backgroundColor(Color.Orange)
                .textAlign(TextAlign.Center)
                .transition({ type: TransitionType.All, translate: { x: 200 }, scale: { x: 0, y: 0 } })
            }, item => item)
          }
          .margin(10)
          .justifyContent(FlexAlign.Start)
          .alignItems(HorizontalAlign.Center)
          .width("90%")
          .height("70%")
    
          Button('向头部添加元素')
            .fontSize(16)
            .width(160)
            .onClick(() => {
              animateTo({ duration: 1000 }, () => {
                // 往数组头部插入一个元素,导致ForEach在头部增加对应的组件
                this.numbers.unshift(this.startNumber.toString());
                this.startNumber++;
              })
            })
          Button('向尾部添加元素')
            .width(160)
            .fontSize(16)
            .onClick(() => {
              animateTo({ duration: 1000 }, () => {
                // 往数组尾部插入一个元素,导致ForEach在尾部增加对应的组件
                this.numbers.push(this.startNumber.toString());
                this.startNumber++;
              })
            })
          Button('删除头部元素')
            .width(160)
            .fontSize(16)
            .onClick(() => {
              animateTo({ duration: 1000 }, () => {
                // 删除数组的头部元素,导致ForEach删除头部的组件
                this.numbers.shift();
              })
            })
          Button('删除尾部元素')
            .width(160)
            .fontSize(16)
            .onClick(() => {
              animateTo({ duration: 1000 }, () => {
                // 删除数组的尾部元素,导致ForEach删除尾部的组件
                this.numbers.pop();
              })
            })
        }
        .width('100%')
        .height('100%')
      }
    }
    

    image

    🚀写在最后

    • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
    • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
    • 关注小编,同时可以期待后续文章ing🚀,不定期分享原创知识。
    • 更多鸿蒙最新技术知识点,请关注作者博客:https://t.doruo.cn/14DjR1rEY

    image

  • 相关阅读:
    IDEA 中 Maven 报错 Cannot resolve xxx【终于解决了】
    yolov8旋转目标检测部署教程(附代码c++/python)
    vue-自适应滑动条overflow: auto
    String 字符串的使用方法 -- JavaScript
    FPGA面试题(4)(跨时钟域处理)
    维基百科是如何定义联合办公空间的?
    Unity(第十八部)物理力学,碰撞,触发、关节和材质
    【Leetcode】【C语言】【合并两个升序单链表】
    【场景化解决方案】连接“云上管车”与道闸系统,企业用车流程更高效
    算法43-欧拉信封问题
  • 原文地址:https://www.cnblogs.com/shudaoshan/p/18148109
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号