回答
要实现悬浮窗可拖动,需要使用 floaty.window() 创建悬浮窗,并启用调整模式。floaty.window() 创建的悬浮窗自带关闭、调整大小和调整位置的按键,而 floaty.rawWindow() 则不包含这些设施。
以下是实现可拖动悬浮窗的关键步骤和代码示例:
- 使用
floaty.window():该函数创建的悬浮窗默认支持位置调整。 - 调用
setAdjustEnabled(true):确保显示调整按钮,从而允许通过按键或触摸拖动来改变位置。 - 保持脚本运行:悬浮窗需要在脚本运行时保持显示,通常使用
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 生成,内容仅供参考