ArkTs-自定义弹窗退出动画问题

问题描述

官方给出的增加自定义弹窗的动画的方法如下:

https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-arkui-223-V5

1.在弹窗的布局上,通过.transition(…)设置布局的动画

2.通过一个变量代表visibility,改变布局的显示与否

点击“取消”按钮时,修改flag ->触发visibility变化 ->UI布局做动画,通过这个流程实现了dialog的入场/出场动画;同时,因为退出dialog时需要给退出动画流出时间,必须设置setTimeOut,等待动画时间后再关闭通过dialogController关闭弹窗。

如何在非点击按钮关闭弹窗的情况下(autoCancel下点击背景、back手势),也让弹窗能够做退出动画?

1.使用DialogStatus在外层Component中控制dialog的可见不可见

2.通过onWillDismiss监听弹窗背景的点击和back手势

实践方案

1.使用dialogController的方式来控制dialog的打开/关闭

2.dialogController创建时,通过onWillDismiss来拦截背景点击和back手势退出

3.在@Component下,维护一个DialogStatus变量,作为外层控制dialog显示与否的flag(启动时设置成true,关闭时设置成false)

4.在dialog布局下,使用DialogStatus控制dialog的布局显示

代码如下:

1.布局代码

@Component
export struct DemoView {
    ...
    dialogController: CustomDialogController|null = null;
    @State dialogStatus: DialogStatus = new DialogStatus(); // 在Component下维护flag,传入dialog,控制dialog显示变化
    ...
    
    aboutToAppear(): void {
        this.dialogController = new CustomDialogController({
            builder: DemoDialog({
                ...
                dialogStatus: this.dialogStatus // 此处传入dialog
            }),
            onWillDismiss: (dismissDialogAction: DismissDialogAction) => {
                // 点击系统返回按钮关闭对话框 || 点击弹窗背景关闭对话框
                if (dismissDialogAction.reason == DismissReason.PRESS_BACK ||
                    dismissDialogAction.reason == DismissReason.TOUCH_OUTSIDE) {
                    this.dialogStatus.isVisible = false;
                }
            },
            ...
        });

        ...
    }
    
    aboutToDisappear(): void {
        this.dialogController = null;
        ...
    }

    build() {
        .....
            .onClick(() => {
                        this.dialogStatus.isVisible = true; // 此处在调用open前一定要手动设置一次true,来回开关弹窗时弹窗的状态需要重置
                        this.dialogController?.open();
                    });
    }
}

2.弹窗代码

@CustomDialog
@Component
export struct DemoDialog {
    @ObjectLink @Watch('onDialogStatusChanged') dialogStatus: DialogStatus;
    ...
    dialogController: CustomDialogController = new CustomDialogController({'builder': ''});
    ...
    
    // dialog中通过监听status的变化来知晓是否要关闭弹窗
    onDialogStatusChanged() {
        if (!this.dialogStatus.isVisible) {
            setTimeout(() => {
                this.dialogController.close();
            }, animateDuration);
        }
    }
    
    build() {
        ...
        .visibility(this.dialogStatus.isVisible ? Visibility.Visible : Visibility.Hidden) // status用于控制visibility
        .transition(TransitionEffect.OPACITY.animation({duration: animateDuration}) // 添加入场/出场动画
            .combine(TransitionEffect.translate({y: 100})));
    }
}
资源下载链接为: https://pan.quark.cn/s/72147cbc453d 在当今信息化时代,高校社团管理的高效性与便捷性至关重要。基于 Spring Boot 开发的社团管理系统,致力于打造一个功能全面、操作便捷且安全可靠的平台,以满足高校社团的日常运营需求。本文将深入剖析该系统的架构设计、核心功能以及实现原理。 Spring Boot 以其轻量级和快速开发的特性,成为众多企业级应用的首选框架。本社团管理系统采用 Spring Boot 搭建,并遵循 RESTful API 设计原则,构建出一个松耦合、模块化的架构。借助 Spring Boot 的自动配置功能,项目初始化工作得以大幅简化,使开发者能够更加专注于业务逻辑的开发。 权限管理是系统安全的关键环节。本系统引入多级权限控制机制,确保不同角色(如管理员、普通成员等)能够访问其对应的系统功能。通常会借助 Spring Security 或 Apache Shiro 等安全框架,通过角色、权限与资源的映射关系,实现对用户操作的精细化管理。 为了提升用户体验和提高信息传递效率,系统集成了短信接口。在用户注册、密码找回、活动报名等关键操作环节,通过短信验证码进行验证。这需要与第三方短信服务提供商(如阿里云、腾讯云等)进行对接,利用其 SDK 实现短信的发送与接收功能。 会员管理:涵盖会员注册、登录、信息修改及权限分配等功能,方便社团成员进行自我管理。 活动管理:支持活动的创建、审批、报名以及评价等全流程管理,便于社团组织各类活动。 场地管理:实现场地的预定、审批和使用记录管理,确保资源的有效分配。 会议管理:提供会议安排、通知以及签到等功能,提升会议组织效率。 社团管理:包括社团的创建、修改、解散以及社团成员管理等功能。 消息通知:能够实时推送系统消息,保障信息的及时传达。 文件下发:支持文件的上传与下载,方便
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值