当前位置:   article > 正文

鸿蒙开发-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实现组件的转场动画效果,下文将学习弹簧曲线动画。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/245396
推荐阅读
相关标签
  

闽ICP备14008679号