• 鸿蒙开发-UI-动画-组件内转场动画


    鸿蒙开发-UI-组件3

    鸿蒙开发-UI-气泡/菜单

    鸿蒙开发-UI-页面路由

    鸿蒙开发-UI-组件导航-Navigation

    鸿蒙开发-UI-组件导航-Tabs

    鸿蒙开发-UI-图形-图片

    鸿蒙开发-UI-图形-绘制几何图形

    鸿蒙开发-UI-图形-绘制自定义图形

    鸿蒙开发-UI-图形-页面内动画

    文章目录

    前言

    一、基本概念

    二、组件内转场动画

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

    2.ForEach产生组件内转场动画

    总结


    前言

    上文细学习了鸿蒙开发UI使用动画相关知识,了解动画的两个维度的分类方式,详细学习了页面内动画-布局更新动画,本文将学习组件内转场动画。

    一、基本概念

    组件的插入、删除过程即为组件本身的转场过程,组件的插入、删除动画称为组件内转场动画,通过组件内转场动画定义组件出现、消失的效果。

    组件内转场动画的接口

    transition(value: TransitionOptions)

    二、组件内转场动画

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

    代码示例

    1. @Entry
    2. @Component
    3. struct IfElseTransition {
    4. @State flag: boolean = true;
    5. @State show: string = 'show';
    6. build() {
    7. Column() {
    8. Button(this.show).width(80).height(30).margin(30)
    9. .onClick(() => {
    10. if (this.flag) {
    11. this.show = 'hide';
    12. } else {
    13. this.show = 'show';
    14. }
    15. //step2: 在animateTo闭包中改变flag的值,由flag变化所引起的Image组件的插入删除,都要按照动画参数产生动画
    16. animateTo({ duration: 1000 }, () => {
    17. this.flag = !this.flag;
    18. })
    19. })
    20. if (this.flag) {
    21. //step1:Image组件是由if控制的组件,给其加上transition的参数,以指定组件内转场的具体效果
    22. //TransitionType.Insert【插入时加上平移效果】
    23. //TransitionType.Delete【删除时加上缩放和透明度效果】
    24. Image($r('app.media.mountain')).width(200).height(200)
    25. .transition({ type: TransitionType.Insert, translate: { x: 200, y: -200 } })
    26. .transition({ type: TransitionType.Delete, opacity: 0, scale: { x: 0, y: 0 } })
    27. }
    28. }.height('100%').width('100%')
    29. }
    30. }

    注:transition必须配合animateTo一起使用,在animateTo的闭包中,控制组件的插入、删除并指定指定动画参数,transition定义动画样式

    2.ForEach产生组件内转场动画

    代码示例

    1. @Entry
    2. @Component
    3. struct ForEachTransition {
    4. @State numbers: string[] = ["1", "2", "3", "4", "5"]
    5. startNumber: number = 6;
    6. build() {
    7. Column({ space: 10 }) {
    8. Column() {
    9. ForEach(this.numbers, (item) => {
    10. //step1: ForEach下的直接组件需配置transition效果
    11. Text(item)
    12. .width(240)
    13. .height(60)
    14. .fontSize(18)
    15. .borderWidth(1)
    16. .backgroundColor(Color.Orange)
    17. .textAlign(TextAlign.Center)
    18. .transition({ type: TransitionType.All, translate: { x: 200 }, scale: { x: 0, y: 0 } })
    19. }, item => item)
    20. }
    21. .margin(10)
    22. .justifyContent(FlexAlign.Start)
    23. .alignItems(HorizontalAlign.Center)
    24. .width("90%")
    25. .height("70%")
    26. Button('向头部添加元素')
    27. .fontSize(16)
    28. .width(160)
    29. .onClick(() => {
    30. animateTo({ duration: 1000 }, () => {
    31. //step2: 在animateTo的闭包中控制组件的插入或删除
    32. //往numbers数组头部插入一个元素,导致ForEach在头部增Text组件
    33. //部增Text组件按照transition定义的样式实现组件转场动画效果
    34. this.numbers.unshift(this.startNumber.toString());
    35. this.startNumber++;
    36. })
    37. })
    38. }
    39. .width('100%')
    40. .height('100%')
    41. }
    42. }

    注:Column布局方式设为了FlexAlign.Start,即垂直方向从头部开始布局。

    1. 往数组末尾添加元素时,并不会对数组中现存元素对应的组件位置造成影响,只会触发新增组件的插入动画。

    2. 往数组头部添加元素时,原来数组中的所有元素的下标都增加了,虽然不会触发其添加或者删除,但是会影响到对应组件的位置。所以除新增的组件会做transition动画以外,之前存在于ForEach中组件也会做位置动画。


    总结

    本文细学习了鸿蒙开发UI组件内转场动画,了解转场的概念,学习在if/else,foreach场景下如何结合transition和animateTo实现组件的转场动画效果,下文将学习弹簧曲线动画。

  • 相关阅读:
    单片机编程原则
    对SPA的理解、对 vue组件化的理解
    创业的第125天——随记
    W波段双圆极化天线研究与设计
    CC2530中文数据手册
    尚好房 09_权限管理
    javaweb-Servlet体系结构
    CSS特效013:背景色彩不停流动效果
    视频播放器的技术组成
    浏览器网页上如何播放dash视频、hls(m3u8)视频和flv格式视频?
  • 原文地址:https://blog.csdn.net/u013488266/article/details/136622513