HarmonyOS 组件导航模式下的共享元素转场

业务场景中有用到导航组件push到下个页面用到共享元素的转场,文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-navigation-navigation-V5#%E5%85%B1%E4%BA%AB%E5%85%83%E7%B4%A0%E8%BD%AC%E5%9C%BA中也有提到实现。但是好像实现的效果并不理想,存在的问题。

1.两个共享元素间的转场动画很突兀,没有过度效果。

2.这里的转场方向还是由右向左,这个如何改变。

HarmonyOS
2024-12-24 15:56:19
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

共享元素转场用于NavDestination之间切换,问题demo中Navigation组件内写入的Image不属于路由栈内元素,因此无法实现共享元素转场效果,可以尝试以下写法:

@Entry
@Component
struct Index {
  @Provide ('navPS') navPathStack: NavPathStack = new NavPathStack();
  aboutToAppear(): void {
    this.navPathStack.replacePath({name:'nextB'},false)
  }
  @Builder
  navPathMapBuilder(name: string) {
    if(name === 'nextB'){
      NextB()
    } else if(name === 'nextC'){
      NextC()
    }
  }
  build() {
    Navigation(this.navPathStack)
      .navDestination(this.navPathMapBuilder)
      .hideNavBar(true)
  }
}
@Component
struct NextB {
  @Consume ('navPS') navPathStack: NavPathStack
  build() {
    NavDestination() {
      Column() {
        Image($r('app.media.app_icon'))
          .width(80)
          .height(80)
          .geometryTransition('sharedId')
          .onClick(() => {
            animateTo({ duration: 1000 }, () => {
              this.navPathStack.pushPath({name :'nextC'},false)
            })
          })
      }
      .width('100%')
      .height('100%')
    }
    .title('设置')
  }
}
@Component
struct NextC {
  @Consume ('navPS') navPathStack: NavPathStack
  build() {
    NavDestination() {
      Column() {
        Image($r('app.media.app_icon'))
          .width(160)
          .height(160)
          .geometryTransition('sharedId')
          .onClick(() => {
            animateTo({ duration: 1000 }, () => {
              this.navPathStack.pop(false)
            })
          })
      }
      .width('100%')
      .height('100%')
    }
    .title('Page C')
    .onBackPressed(()=>{
      animateTo({ duration: 1000 }, () => {
        this.navPathStack.pop(false)
      })
      return true
    })
  }
}
分享
微博
QQ
微信
回复
2024-12-24 18:41:07
相关问题
如何实现共享元素转场
615浏览 • 1回复 待解决
HarmonyOS 咨询共享元素动态转场示例
720浏览 • 1回复 待解决
HarmonyOS 如何自定义导航转场
348浏览 • 1回复 待解决
HarmonyOS navigation导航转场动画怎么写
318浏览 • 1回复 待解决
HarmonyOS 页面内组件转场动画
579浏览 • 1回复 待解决