HarmonyOS 鸿蒙Next uiContext.getPromptAction().openCustomDialog动画

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

HarmonyOS 鸿蒙Next uiContext.getPromptAction().openCustomDialog动画

使用uiContext.getPromptAction().openCustomDialog显示dialog从下往上的动画时候,背景色会同时从底部往上,如何能先执行动画后再显示背景。

TransitionEffect.asymmetric(
TransitionEffect.OPACITY.animation({ duration: duration }).combine(
TransitionEffect.translate({ y: 1000 }).animation({ duration: duration })),
TransitionEffect.OPACITY.animation({ delay: duration, duration: duration }).combine(
TransitionEffect.translate({ y: 1000 }).animation({ duration: duration }))

2 回复

参考demo:

import { ComponentContent } from '[@kit](/user/kit).ArkUI';

let duration = 1000
let effect: TransitionEffect =
 TransitionEffect.asymmetric(
   TransitionEffect.OPACITY.animation({ duration: duration })
     .combine(
       TransitionEffect.translate({ y: 1000 }).animation({ duration: duration })
     )
   ,
   TransitionEffect.OPACITY.animation({ delay: duration, duration: duration })
     .combine(
       TransitionEffect.translate({ y: 0 }).animation({ duration: duration })
     )
 )

class BaseParam {
 context: UIContext;

 constructor(context: UIContext) {
   this.context = context;
 }
}

class Dialog2Param extends BaseParam {
 text: string;

 constructor(context: UIContext, text: string) {
   super(context);
   this.text = text;
 }
}

[@Builder](/user/Builder)
function dialog2Builder1(params: Dialog2Param) {
 Flex({
   direction: FlexDirection.Column,
   alignContent: FlexAlign.Center,
   justifyContent: FlexAlign.Center,
   alignItems: ItemAlign.Center,
 }) {
   Text('dialog2')
   Button('页面绑定dialog2关闭').onClick(() => {
     let uiContext = params.context;
     let promptAction = uiContext.getPromptAction();
     promptAction.closeCustomDialog(dialog2);
   })
 }
 .width('100%')
 .height('60%')
 .backgroundColor(Color.White)
 .transition(effect)
 .position({ y: 400 })
 .mask(ProgressMask.prototype)
}

let dialog2: ComponentContent<Dialog2Param> | undefined = undefined;

[@Entry](/user/Entry)
[@Component](/user/Component)
struct GlobalDialog {
 [@State](/user/State) message: string = 'Hello World';
 [@State](/user/State) delayNumber: number = 3000

 build() {
   RelativeContainer() {
     Button('打开dialog2').onClick(() => {
       let uiContext = this.getUIContext();
       let promptAction = uiContext.getPromptAction();
       dialog2 =
         new ComponentContent(uiContext, wrapBuilder(dialog2Builder1), new Dialog2Param(uiContext, this.message));
       promptAction.openCustomDialog(dialog2);
       this.delayNumber = 1 / 0
     })
   }
   .height('100%')
   .width('100%')
 }
}

在HarmonyOS鸿蒙系统中,uiContext.getPromptAction().openCustomDialog 方法用于打开自定义对话框。关于你提到的动画效果,这通常涉及到对话框的显示和隐藏时的过渡动画。

HarmonyOS提供了丰富的动画资源,你可以通过以下几种方式来实现或调整openCustomDialog的动画效果:

  1. 自定义动画资源:在resources目录下创建动画资源文件(如xml文件),定义对话框进入和退出的动画效果。然后在打开对话框时,通过对话框的setAnimationStyle方法应用这些动画资源。

  2. 使用系统动画:HarmonyOS系统也提供了一些内置的动画效果,你可以直接通过对话框的API设置使用。

  3. 编程实现动画:如果内置动画和自定义资源文件不能满足需求,还可以通过编程方式,在对话框显示或隐藏时,通过动画类(如AnimationAnimator)来动态控制动画效果。

请确保你的动画资源文件命名和路径正确,并且在代码中正确引用。如果动画效果未能如预期显示,可能是资源文件未正确加载或代码中存在其他逻辑错误。

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

回到顶部