首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

鸿蒙HarmonyOS实战-ArkUI动画(页面转场动画)

  • 25-02-22 03:40
  • 4191
  • 11458
blog.csdn.net

前言

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

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

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

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

一、页面转场动画

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. }

在这里插入图片描述

 ?写在最后

  • 如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
  • 点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
  • 关注小编,同时可以期待后续文章ing?,不定期分享原创知识。
  • 想要获取个人更多完整鸿蒙最新VIP学习资料,请点击→全套鸿蒙HarmonyOS学习资料
  • 或者关注小编后私信回复【666】也可获取资料哦~~

最新鸿蒙Next全套学习资料请扫码
微信名片
注:本文转载自blog.csdn.net的蜀道山QAQ的文章"https://blog.csdn.net/shudaoshanQAQ/article/details/135460826"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top