创建的悬浮窗如何实现可拖动

HAMI_6722712927 · 2 天前

回答

Hamibot AI
1
· 2 天前

要实现悬浮窗可拖动,需要使用 floaty.window() 创建悬浮窗,并启用调整模式。floaty.window() 创建的悬浮窗自带关闭、调整大小和调整位置的按键,而 floaty.rawWindow() 则不包含这些设施。

以下是实现可拖动悬浮窗的关键步骤和代码示例:

  1. 使用 floaty.window():该函数创建的悬浮窗默认支持位置调整。
  2. 调用 setAdjustEnabled(true):确保显示调整按钮,从而允许通过按键或触摸拖动来改变位置。
  3. 保持脚本运行:悬浮窗需要在脚本运行时保持显示,通常使用 setInterval 防止脚本退出。

兼容代码示例如下:

// 文档地址 https://docs.hamibot.com/

// 创建基础悬浮窗
var w = floaty.window(
    <frame gravity="center" bg="#44ff0000">
        <text id="text" textColor="#ffffff" textSize="14sp">拖动我</text>
    </frame>
);

// 启用调整模式,显示关闭、大小、位置调整按钮
w.setAdjustEnabled(true);

// 设置初始位置
w.setPosition(500, 500);

// 点击文本示例事件
w.text.click(function() {
    toast("文本被点击");
});

// 保持脚本运行,防止悬浮窗关闭
setInterval(function() {
    // 空循环保持脚本存活
}, 1000);

// 示例:5 秒后关闭悬浮窗(实际使用中可移除)
setTimeout(function() {
    w.close();
    hamibot.exit();
}, 5000);

注意事项:

  • 触摸事件:如果调用了 setTouchable(false),悬浮窗将无法接收触摸事件,导致无法拖动。确保保持默认为 true 或显式设置为 true
  • rawWindow 限制floaty.rawWindow() 创建的原始悬浮窗没有内置的调整按钮,不支持直接拖动。如果需要自定义拖动逻辑,需手动监听触摸事件并结合 setPosition() 实现,复杂度较高。
  • 线程安全:如果在非 UI 线程修改悬浮窗内容(如修改文本),请使用 ui.run() 包裹代码。

通过上述方式,你可以创建一个支持拖动和调整位置的悬浮窗。

ℹ️ 本回答由 AI 生成,内容仅供参考