HarmonyOS 请给类似图片的弹窗UI及向上弹出动画提供个demo

如下图所示:

HarmonyOS 请给类似图片的弹窗UI及向上弹出动画提供个demo -鸿蒙开发者社区

HarmonyOS
4天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

参考示例如下:

@CustomDialog
struct CustomDialogExample {

  controller: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({}),
    autoCancel: false
  })
  @State showFlag: Visibility = Visibility.Visible;
  @State isAutoCancel: boolean = false;
  anmDuration: number = 300

  textController: TextAreaController = new TextAreaController()

  build() {
    Column() {
      Row() {
        Text("自定义动画的弹窗")
      }.borderRadius(20).backgroundColor('#ff6288cb').height(200).width('100%')
    }
    .margin({ top: 10 })
    .justifyContent(FlexAlign.Center)
    .onClick(() => {
      console.log("dialogClick")
      if (this.isAutoCancel) {
        console.log("dialogClick2")
        this.cancel();
      }
    })
    .visibility(this.showFlag)
    // 定义进场出场转场动画效果
    .transition(TransitionEffect.OPACITY.animation({ duration: this.anmDuration })
      .combine(TransitionEffect.translate({ y: 300 })))
  }

  // 延迟关闭弹窗,让自定义的出场动画显示
  cancel() {
    this.showFlag = Visibility.Hidden
    console.log("closeDialog")
    setTimeout(() => {
      this.controller.close()
    }, this.anmDuration)
  }
}

@Entry
@Component
struct CustomDialogPage {
  @State isAutoCancel: boolean = true;
  dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({ isAutoCancel: this.isAutoCancel }),
    autoCancel: this.isAutoCancel,
    customStyle: true,
    alignment: DialogAlignment.Bottom
  })

  build() {
    Column() {
      Button('click me').onClick(() => {
        this.dialogController.open()
      })
    }.width('100%').height('100%')
  }
}
分享
微博
QQ
微信
回复
4天前
相关问题
HarmonyOS 希望提供分享弹窗Demo
47浏览 • 1回复 待解决
HarmonyOS提供路由跳转Demo
410浏览 • 1回复 待解决
如何实现一动画弹窗
526浏览 • 1回复 待解决