HarmonyOS SideBarContainer在展开、收起时是否可执行动画?

1.在使用SideBarContainer控件时,隐藏了ControlButton,在侧边栏展开收起过程中,侧边栏没有执行展开收起的动画。显得UI效果很生硬,有没有办法让SideBarContainer在展开收起时有动画效果执行?

2.展开收起是否支持手势滑动?跟随手指的滑动展开、收起,并在展开收起过程中跟随手指滑动的距离进行相应的变动?

3.如果SideBarContainer不支持以上效果,是否有其它推荐的控件,支持侧滑推出一个Component覆盖在当前的页面上?

HarmonyOS
2024-10-10 13:03:39
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

请参考如下demo:

@Entry  
@Component  
struct SideBarContainerDemo {  
  @State arr: number[] = [1, 2, 3]  
  @State current: number = 1  
  @State showSideBar: boolean = false  
  @State showFlag: Visibility = Visibility.Hidden;  
  private panOptionLeft: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Left })  
  private panOptionRigth: PanGestureOptions = new PanGestureOptions({ direction: PanDirection.Right })  
  // 延迟关闭侧边栏,让自定义的出场动画显示  
  cancel() {  
    this.showFlag = Visibility.Hidden  
    setTimeout(() => {  
      this.showSideBar = !this.showSideBar  
    }, 1000)  
  }  
  build() {  
    SideBarContainer(SideBarContainerType.Overlay) {  
      Column() {  
        ForEach(this.arr, (item: number) => {  
          Column({ space: 5 }) {  
            Text("Index0" + item)  
              .fontSize(25)  
              .fontColor(this.current === item ? '#0A59F7' : '#999')  
              .fontFamily('source-sans-pro,cursive,sans-serif')  
          }  
          .onClick(() => {  
            this.current = item  
          })  
        }, (item: string) => item)  
      }  
      .visibility(this.showFlag)  
      .transition(TransitionEffect.OPACITY.animation({ duration: 1000 })  
        .combine(TransitionEffect.translate({ x: 100 })))  
      .width('100%')  
      .justifyContent(FlexAlign.SpaceEvenly)  
      .backgroundColor(Color.Pink)  
      Column() {  
      }  
      .backgroundColor(Color.Green)  
      // 左右拖动触发该手势事件  
      .gesture(  
        GestureGroup(GestureMode.Parallel,  
          PanGesture(this.panOptionLeft)  
            .onActionStart(() => {  
              console.info('pan start')  
            })  
            .onActionUpdate((event?: GestureEvent) => {  
              if (event) {  
                this.showFlag = Visibility.Visible  
                this.showSideBar = true  
              }  
              console.info('pan update')  
            })  
            .onActionEnd(() => {  
  
              console.info('pan end')  
            }),  
          PanGesture(this.panOptionRigth)  
            .onActionStart(() => {  
              console.info('pan start')  
            })  
            .onActionUpdate((event?: GestureEvent) => {  
              if (event) {  
  
              }  
              this.cancel()  
              console.info('pan update')  
            })  
            .onActionEnd(() => {  
              console.info('pan end')  
            })  
        )  
      )  
    }  
    .divider(null)  
    .sideBarPosition(SideBarPosition.End)  
    .showSideBar(this.showSideBar)  
    .showControlButton(false)  
    .sideBarWidth(150)  
    .minSideBarWidth(50)  
    .maxSideBarWidth(300)  
    .minContentWidth(0)  
    .onChange((value: boolean) => {  
      console.info('status:' + value)  
    })  
  }  
}

手势可以实现根据滑动距离提供回调,然后通过动态更新sideBarWidth实现这个效果。https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-basic-gestures-pangesture.md

分享
微博
QQ
微信
回复
2024-10-10 16:57:21
相关问题
如何实现文本展开收起功能
875浏览 • 1回复 待解决
camera demo可执行文件编译
4132浏览 • 0回复 待解决
HarmonyOS 动画执行时机问题
252浏览 • 1回复 待解决