HarmonyOS 鸿蒙Next中修改自定义对话框的转场方式

HarmonyOS 鸿蒙Next中修改自定义对话框的转场方式 显示在屏幕底部的自定义对话框,如何设置弹窗从底部弹入,从底部退出。

mTimeSelectorDialog: CustomDialogController = new CustomDialogController({
  builder: TimeSelectorDialog({
    dialogTitle: '分享时间',
    confirm: (timeBean: TimeBean) => {
      let timeHour = timeBean.timeHour
      let timeMinute = timeBean.timeMinute
      console.info(`时间选择=${timeHour}:${timeMinute}`)
      this.timeSelectorText(timeHour * 60 * 60 + timeMinute * 60)
      this.onSaveAction()
    }
  }),
  customStyle: true,
  alignment: DialogAlignment.Bottom
})

更多关于HarmonyOS 鸿蒙Next中修改自定义对话框的转场方式的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

参考

@CustomDialog
struct CustomDialogExample {
  controller: CustomDialogController
  @State showFlag: Visibility = Visibility.Visible;
  build() {
    Column() {
      Button("关闭弹窗")
    }
    .width("100%")
    .height(400)
    .backgroundColor(Color.Gray)
    .onClick(() => {
      this.cancel();
    })
    .visibility(this.showFlag) 
    //核心代码 设置动画事件为200ms ,设置组件转场时插入的起点和删除的终点为屏幕以下100vp
    .transition(TransitionEffect.OPACITY.animation({ duration: 200 }).combine(TransitionEffect.translate({ y: 100 })))
  }

  // 设置弹窗为隐藏,此时弹出向下退出的动效生效,再设置延时关闭弹窗。
  cancel() {
    this.showFlag = Visibility.Hidden
    setTimeout(() => {
      this.controller.close()
    }, 200)
  }
}

@Entry
@Component
struct CustomDialogUser {
  dialogController: CustomDialogController = new CustomDialogController({ builder: CustomDialogExample(), autoCancel: false, customStyle: true })

  build() {
    Column() {
      Button('click me').onClick(() => {
        this.dialogController.open()
      })
    }.width('100%').height('100%')
  }
}

更多关于HarmonyOS 鸿蒙Next中修改自定义对话框的转场方式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


底部的话,用半模态转场比较好吧

在HarmonyOS鸿蒙Next中,修改自定义对话框的转场方式可以通过以下步骤实现:

  1. 创建自定义对话框:使用Dialog类或其子类创建自定义对话框。
  2. 设置转场动画:通过WindowsetTransition方法设置转场动画。可以使用系统提供的动画资源,如R.transition.slide_in_right,或自定义动画资源。
  3. 应用转场动画:在显示对话框时,调用show()方法,系统会自动应用设置的转场动画。

示例代码:

Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.custom_dialog);
dialog.getWindow().setTransition(R.transition.slide_in_right);
dialog.show();
回到顶部