当前位置:   article > 正文

鸿蒙HarmonyOS实战-ArkUI动画(页面转场动画)_鸿蒙arkui tab 切换动画

鸿蒙arkui tab 切换动画

前言

页面转场动画是指在应用程序中,当用户导航到另一个页面时,使用动画效果来过渡页面之间的切换。这样做的目的是为了提升用户体验,使页面之间的切换更加平滑和有趣。

常见的页面转场动画包括淡入淡出、滑动、翻转、缩放等效果。通过使用这些动画效果,可以给用户一种流畅的感觉,让页面之间的切换更加自然。

在实现页面转场动画时,可以根据具体的需求和设计来选择合适的转场效果,并结合页面的布局和内容来调整动画效果的细节。

页面转场动画是一种通过使用动画效果来过渡页面切换的方式,旨在提升用户体验,使页面之间的切换更加平滑和有趣。

一、页面转场动画

1.type配置

PageTransitionEnter和PageTransitionExit的接口为:

  1. PageTransitionEnter({type?: RouteType,duration?: number,curve?: Curve | string,delay?: number})
  2. PageTransitionExit({type?: RouteType,duration?: number,curve?: Curve | string,delay?: number})

在HarmonyOS中,PageTransitionEnter和PageTransitionExit是用于控制页面切换动画的参数。它们分别表示页面进入和退出时的动画。

  1. type(动画类型):表示动画的类型,可以取以下几种值:

    • NONE:表示对页面栈的push、pop操作均生效,type的默认值为RouteType.None。
    • Push:表示仅对页面栈的push操作生效。
    • Pop:表示仅对页面栈的pop操作生效。
  2. duration(动画时长):表示动画的时长,单位为毫秒。

  3. curve(动画曲线):表示动画的变化曲线。

  4. delay(动画延迟):表示动画的延迟时间,单位为毫秒。

页面A

  1. // page A
  2. pageTransition() {
  3. // 定义页面进入时的效果,从右侧滑入,时长为1200ms,页面栈发生push操作时该效果才生效
  4. PageTransitionEnter({ type: RouteType.Push, duration: 1200 })
  5. .slide(SlideEffect.Right)
  6. // 定义页面进入时的效果,从左侧滑入,时长为1200ms,页面栈发生pop操作时该效果才生效
  7. PageTransitionEnter({ type: RouteType.Pop, duration: 1200 })
  8. .slide(SlideEffect.Left)
  9. // 定义页面退出时的效果,向左侧滑出,时长为1000ms,页面栈发生push操作时该效果才生效
  10. PageTransitionExit({ type: RouteType.Push, duration: 1000 })
  11. .slide(SlideEffect.Left)
  12. // 定义页面退出时的效果,向右侧滑出,时长为1000ms,页面栈发生pop操作时该效果才生效
  13. PageTransitionExit({ type: RouteType.Pop, duration: 1000 })
  14. .slide(SlideEffect.Right)
  15. }

页面B

  1. // page B
  2. pageTransition() {
  3. // 定义页面进入时的效果,从右侧滑入,时长为1000ms,页面栈发生push操作时该效果才生效
  4. PageTransitionEnter({ type: RouteType.Push, duration: 1000 })
  5. .slide(SlideEffect.Right)
  6. // 定义页面进入时的效果,从左侧滑入,时长为1000ms,页面栈发生pop操作时该效果才生效
  7. PageTransitionEnter({ type: RouteType.Pop, duration: 1000 })
  8. .slide(SlideEffect.Left)
  9. // 定义页面退出时的效果,向左侧滑出,时长为1200ms,页面栈发生push操作时该效果才生效
  10. PageTransitionExit({ type: RouteType.Push, duration: 1200 })
  11. .slide(SlideEffect.Left)
  12. // 定义页面退出时的效果,向右侧滑出,时长为1200ms,页面栈发生pop操作时该效果才生效
  13. PageTransitionExit({ type: RouteType.Pop, duration: 1200 })
  14. .slide(SlideEffect.Right)
  15. }

通过设置页面转场的时长为0,可使该页面无页面转场动画。

2.场景示例

页面A

  1. // PageTransitionSrc1
  2. import router from '@ohos.router';
  3. @Entry
  4. @Component
  5. struct PageTransitionSrc1 {
  6. build() {
  7. Column() {
  8. Image($r('app.media.img_2'))
  9. .width('90%')
  10. .height('80%')
  11. .objectFit(ImageFit.Fill)
  12. .syncLoad(true) // 同步加载图片,使页面出现时图片已经加载完成
  13. .margin(30)
  14. Row({ space: 10 }) {
  15. Button("pushUrl")
  16. .onClick(() => {
  17. // 路由到下一个页面,push操作
  18. router.pushUrl({ url: 'pages/myTest/pageTransitionDst1' });
  19. })
  20. Button("back")
  21. .onClick(() => {
  22. // 返回到上一页面,相当于pop操作
  23. router.back();
  24. })
  25. }.justifyContent(FlexAlign.Center)
  26. }
  27. .width("100%").height("100%")
  28. .alignItems(HorizontalAlign.Center)
  29. }
  30. pageTransition() {
  31. // 定义页面进入时的效果,从右侧滑入,时长为1000ms,页面栈发生push操作时该效果才生效
  32. PageTransitionEnter({ type: RouteType.Push, duration: 1000 })
  33. .slide(SlideEffect.Right)
  34. // 定义页面进入时的效果,从左侧滑入,时长为1000ms,页面栈发生pop操作时该效果才生效
  35. PageTransitionEnter({ type: RouteType.Pop, duration: 1000 })
  36. .slide(SlideEffect.Left)
  37. // 定义页面退出时的效果,向左侧滑出,时长为1000ms,页面栈发生push操作时该效果才生效
  38. PageTransitionExit({ type: RouteType.Push, duration: 1000 })
  39. .slide(SlideEffect.Left)
  40. // 定义页面退出时的效果,向右侧滑出,时长为1000ms,页面栈发生pop操作时该效果才生效
  41. PageTransitionExit({ type: RouteType.Pop, duration: 1000 })
  42. .slide(SlideEffect.Right)
  43. }
  44. }

页面B

  1. // PageTransitionDst1
  2. import router from '@ohos.router';
  3. @Entry
  4. @Component
  5. struct PageTransitionDst1 {
  6. build() {
  7. Column() {
  8. Image($r('app.media.img_2'))
  9. .width('90%')
  10. .height('80%')
  11. .objectFit(ImageFit.Fill)
  12. .syncLoad(true) // 同步加载图片,使页面出现时图片已经加载完成
  13. .margin(30)
  14. Row({ space: 10 }) {
  15. Button("pushUrl")
  16. .onClick(() => {
  17. // 路由到下一页面,push操作
  18. router.pushUrl({ url: 'pages/myTest/pageTransitionSrc1' });
  19. })
  20. Button("back")
  21. .onClick(() => {
  22. // 返回到上一页面,相当于pop操作
  23. router.back();
  24. })
  25. }.justifyContent(FlexAlign.Center)
  26. }
  27. .width("100%").height("100%")
  28. .alignItems(HorizontalAlign.Center)
  29. }
  30. pageTransition() {
  31. // 定义页面进入时的效果,从右侧滑入,时长为1000ms,页面栈发生push操作时该效果才生效
  32. PageTransitionEnter({ type: RouteType.Push, duration: 1000 })
  33. .slide(SlideEffect.Right)
  34. // 定义页面进入时的效果,从左侧滑入,时长为1000ms,页面栈发生pop操作时该效果才生效
  35. PageTransitionEnter({ type: RouteType.Pop, duration: 1000 })
  36. .slide(SlideEffect.Left)
  37. // 定义页面退出时的效果,向左侧滑出,时长为1000ms,页面栈发生push操作时该效果才生效
  38. PageTransitionExit({ type: RouteType.Push, duration: 1000 })
  39. .slide(SlideEffect.Left)
  40. // 定义页面退出时的效果,向右侧滑出,时长为1000ms,页面栈发生pop操作时该效果才生效
  41. PageTransitionExit({ type: RouteType.Pop, duration: 1000 })
  42. .slide(SlideEffect.Right)
  43. }
  44. }

在这里插入图片描述

 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/280027

推荐阅读
相关标签