HarmonyOS 发现页的一镜到底方案实现

HarmonyOS
2024-12-26 14:41:46
594浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
aquaa

参照官方示例对Navigation添加customNavContentTransition自定义转场:

https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-components-navigation.md#%E7%A4%BA%E4%BE%8B3

添加后每次转场时都会走这个函数,返回undefined的话则走默认的navigation左右转场,返回NavigationAnimatedTransition类型对象的话则走对应的自定义转场动画实现。因此在customNavContentTransition函数中需要自行添加路由管控,基本方式是对from.name和to.name以及是否注册了转场动画实现等进行判断,来决定是否走自定义转场。

Navigation(this.pageInfos)
  .hideNavBar(true)
  .customNavContentTransition((from: NavContentInfo, to: NavContentInfo, operation: NavigationOperation) => {
    if ((!from || !to) || (!from.name || !to.name)) {
      return undefined;
    }
    // 通过from和to的name对自定义转场路由进行管控
    if (!this.isCustomTransitionEnabled(from.name, to.name)) {
      return undefined;
    }
    // 针对点击按钮A走自定义转场点击按钮B走默认转场的场景,需要对是否注册了animation进行判断,来决定是否走自定义转场
    let fromParam: AnimateCallback = CustomTransition.getInstance().getAnimateParam(from.index);
    let toParam: AnimateCallback = CustomTransition.getInstance().getAnimateParam(to.index);
    if (!fromParam.animation && !toParam.animation) {
      return undefined;
    }
    // 一切判断完成后,构造customAnimation给系统侧调用,执行自定义转场动画
    let customAnimation: NavigationAnimatedTransition = {
      onTransitionEnd: (isSuccess: boolean) => {
        console.log(TAG, `current transition result is ${isSuccess}`);
      },
      timeout: 1000,
      transition: (transitionProxy: NavigationTransitionProxy) => {
        console.log(TAG, 'trigger transition callback');
        if (fromParam.animation) {
          fromParam.animation(operation == NavigationOperation.PUSH, true, transitionProxy);
        }
        if (toParam.animation) {
          toParam.animation(operation == NavigationOperation.PUSH, false, transitionProxy);
        }
      }
    };
    return customAnimation;
  })
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
分享
微博
QQ
微信
回复
2024-12-26 17:03:26
相关问题
HarmonyOS实现方案问题
734浏览 • 2回复 待解决
HarmonyOS 全局loading实现方案
816浏览 • 1回复 待解决
HarmonyOS 列表实现方案
903浏览 • 1回复 待解决
HarmonyOS IOC实现方案
936浏览 • 1回复 待解决
鸿蒙闪屏实现怎么实现
5819浏览 • 1回复 待解决
HarmonyOS 加密和解密方案实现
843浏览 • 1回复 待解决
HarmonyOS List瀑布流实现方案
871浏览 • 1回复 待解决
鸿蒙系统异构组网到底实现了没有?
9505浏览 • 1回复 待解决
HarmonyOS NFC方案如何实现
788浏览 • 1回复 待解决