使用dialog窗口实现红包雨窗口创建

在应用使用中会出现红包雨,红包雨的实现类似dialog弹窗,如何合理实现红包雨的效果。

场景:判断UI提供的自定义弹窗和window提供dialog那个层级更高。

HarmonyOS
2024-05-26 14:06:17
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
milchcow

使用的核心API

ArkUI-自定义弹窗

Window-创建新窗口

核心代

核心代码解释

在页面中搭建一个自定义弹窗组件和一个window提供的dialog组件进行层级对比。在页面显示5秒后会创建一个window层级的dialog,使用Button可以在dialog窗口创建前后生成自定义弹窗从而测试是否会产生遮挡。

import window from '@ohos.window' 
// ArkUI提供的自定义弹窗 
@CustomDialog 
struct CustomDialogExample { 
  controller: CustomDialogController = new CustomDialogController({  
    builder: CustomDialogExample({}), 
  }) 
   
  build() { 
    Column() { 
      Text('我是内容') 
        .fontSize(20) 
        .margin({ top: 10, bottom: 10 }) 
    } 
  } 
} 
@Entry 
@Component 
struct Page1 { 
  dialogController: CustomDialogController = new CustomDialogController({ 
        builder: CustomDialogExample(), 
  }) 
  @State message: string = 'Hello World' 
  onPageShow() { 
    //定时器。5秒后自动创建一个dialog窗口 
    setTimeout(() => { 
      let dialogConfig: window.Configuration = { 
        name: 'moneyRain', 
        ctx: getContext(this), 
        windowType: window.WindowType.TYPE_DIALOG 
      } 
      window.createWindow(dialogConfig, (err, win) => { 
        win.setWindowTouchable(true); 
        win.resize(800, 2600); 
        win.moveWindowTo(50, 800) 
        win.setUIContent('pages/Page2'); 
        win.showWindow(); 
      }) 
    }, 5000) 
  } 
  build() { 
    Row() { 
      Column() { 
        // 按钮触发自定义弹窗 
        Button('click me') 
          .onClick(() => { 
            this.dialogController.open() 
          }) 
      }.width('100%').margin({ top: 5 }) 
    } 
    .width('100%') 
  } 
}

总结:

无论是自定义弹窗还是dialog窗口都只存在于主窗口上,跟着主窗口一起置于前后台。

dialog窗口在屏幕Y轴上的高度是高于自定义弹窗的,自定义弹窗对dialog窗口无影响。

分享
微博
QQ
微信
回复
2024-05-27 17:05:39
相关问题
HarmonyOS桌面小窗口实现方案
471浏览 • 1回复 待解决
基于子窗口实现应用内悬浮窗
783浏览 • 1回复 待解决
如何用WebView创建窗口
829浏览 • 1回复 待解决
如何创建Toast窗口,你知道吗?
1792浏览 • 1回复 待解决
arkTS无法创建窗口有了解的吗?
2258浏览 • 0回复 待解决
电脑端窗口预关闭实现
666浏览 • 1回复 待解决
使用onBackPress对子窗口进行销毁
1054浏览 • 1回复 待解决
禁用窗口的全屏显示功能如何实现
406浏览 • 1回复 待解决
如何实现一个页面显示子窗口
722浏览 • 1回复 待解决