HarmonyOS 鸿蒙Next CustomDialog自定义动画

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next CustomDialog自定义动画

CustomDialog支持自定义动画吗,比如我要让CustomDialog从底部弹出,关闭从底部退出?

2 回复

CustomDialog支持自定义动画 ,可以参考以下demo:

let anmDuration: number = 800;

// 弹窗交互

[@CustomDialog](/user/CustomDialog)

struct CustomDialogExample {

  [@State](/user/State) showFlag: Visibility = Visibility.Visible;

  [@State](/user/State) isAutoCancel: boolean = false;

  controller: CustomDialogController = new CustomDialogController({

    builder: CustomDialogExample({}),

    autoCancel: false

  })

  build() {

    Column() {

      Text('我是内容')

        .fontSize(20)

        .margin({ top: 10, bottom: 10 })

        .backgroundColor('#FFFFFF')

        .textAlign(TextAlign.Center)

        .height(200)

        .width('100%')

        .onClick(() => {

          this.cancel();

        })

    }

    .width('100%')

    .height('100%')

    .margin({

      bottom: -15

    })

    .onClick(() => {

      if (this.isAutoCancel) {

        this.cancel();

      }

    })

    .visibility(this.showFlag)

    // 定义进场出场转场动画效果

    .transition(TransitionEffect.OPACITY.animation({ duration: anmDuration })

      .combine(TransitionEffect.translate({ x: 0, y: 100 })))

  }

  // 延迟关闭弹窗,让自定义的出场动画显示

  cancel() {

    this.showFlag = Visibility.Hidden

    setTimeout(() => {

      this.controller.close()

    }, anmDuration)

  }

}

[@Entry](/user/Entry)

[@Component](/user/Component)

struct CustomDialogUser {

  // 是否允许点击遮障层退出

  [@State](/user/State) isAutoCancel: boolean = true;

  dialogController: CustomDialogController = new CustomDialogController({

    builder: CustomDialogExample({ isAutoCancel: this.isAutoCancel }),

    autoCancel: this.isAutoCancel,

    // 弹窗容器样式是否自定义

    customStyle: true

  })

  build() {

    Column() {

      Button('点我')

        .onClick(() => {

          this.dialogController.open()

        })

    }.width('100%').height('100%').margin({ top: 5 })

  }

}

更多关于HarmonyOS 鸿蒙Next CustomDialog自定义动画的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,实现Next CustomDialog自定义动画可以通过以下步骤进行:

  1. 定义动画资源:首先,在resources/anim目录下定义你需要的动画资源,比如进入动画enter_anim.xml和退出动画exit_anim.xml。这些文件定义了动画的具体行为和效果。

  2. 创建CustomDialog布局:在resources/layout目录下创建一个自定义的Dialog布局文件,比如custom_dialog_layout.xml,并在其中定义Dialog的UI元素。

  3. 实现CustomDialog类:在Java或JS代码中,继承或实现Dialog类(根据使用的框架),并在构造函数或初始化方法中设置Dialog的布局和动画。例如,使用setDialogAnimStyle方法设置Dialog的进入和退出动画。

  4. 展示CustomDialog:在需要展示Dialog的地方,创建CustomDialog的实例,并通过show方法将其显示出来。

示例代码(以JS为例,实际代码需根据具体情况调整):

// 假设已有动画资源和布局文件
CustomDialog({
    layout: 'custom_dialog_layout',
    enterAnim: 'enter_anim',
    exitAnim: 'exit_anim',
    // 其他Dialog属性
}).show();

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部