我正在写一个可拖动的半透明悬浮窗按钮,能否帮我写出这套按钮的代码?
我需要它有交互效果,按钮就只有一个,未点击的时候显示的是“启动”,按钮的上方需要显示一串标题“PPTM”,启动以后会垂直向下弹出三个按钮,分别是暂停,关闭,配置,我需要他是可拖动的,脚本启动时它会出现在屏幕右侧。
第 1 条补充
· 1 个月前
为什么我点击就闪退,而且拖动不了
第 2 条补充
· 1 个月前
专业版怎么获得
回答
文档地址 https://docs.hamibot.com/
以下是符合需求的悬浮窗按钮实现代码:
var floatyWin = floaty.window(
<vertical bg="#88ffffff" padding="8" id="root">
<text id="title" text="PPTM" textSize="20sp" gravity="center"/>
<button id="startBtn" text="启动" margin="8"/>
<vertical id="actions" visibility="gone">
<button id="pauseBtn" text="暂停"/>
<button id="configBtn" text="配置"/>
<button id="exitBtn" text="关闭"/>
</vertical>
</vertical>,
{
movable: true
}
);
// 定位到屏幕右侧
setTimeout(function() {
var screenWidth = device.width;
floatyWin.setPosition(screenWidth - floatyWin.getWidth(), 100);
}, 100);
// 按钮交互逻辑
floatyWin.startBtn.click(function() {
var isVisible = floatyWin.actions.getVisibility() == "visible";
floatyWin.actions.setVisibility(isVisible ? "gone" : "visible");
});
floatyWin.pauseBtn.click(function() {
toast("暂停功能");
});
floatyWin.configBtn.click(function() {
toast("配置功能");
});
floatyWin.exitBtn.click(function() {
floatyWin.close();
});
setInterval(function(){}, 1000);
主要特性说明:
- 可拖动悬浮窗:通过
movable: true
参数实现全局拖动 - 半透明效果:使用
bg="#88ffffff"
设置50%透明度背景 - 动态展开:点击"启动"按钮后,下方按钮通过
setVisibility
切换可见性 - 屏幕定位:通过
setPosition
将悬浮窗固定在右侧(需等待UI渲染完成) - 交互反馈:各按钮点击事件已预留回调函数
注意:此代码使用传统函数表达式编写,确保兼容Rhino 1.7.15引擎。运行后悬浮窗会显示在屏幕右侧,点击"启动"按钮会展开操作面板,支持拖动和基础点击交互。
补充回答 1
文档地址 https://docs.hamibot.com/
请检查以下三项关键配置:
- 悬浮窗权限配置
// 必须请求悬浮窗权限
auto.waitFor();
在脚本开头添加该语句,确保已申请悬浮窗权限
- 完整代码验证:
var floatyWin = floaty.window(
<vertical bg="#88ffffff" padding="8" id="root">
<text id="title" text="PPTM" textSize="20sp" gravity="center"/>
<button id="startBtn" text="启动" margin="8"/>
<vertical id="actions" visibility="gone">
<button id="pauseBtn" text="暂停"/>
<button id="configBtn" text="配置"/>
<button id="exitBtn" text="关闭"/>
</vertical>
</vertical>,
{
movable: true,
width: -2, // WRAP_CONTENT
height: -2 // WRAP_CONTENT
}
);
// 定位到屏幕右侧
setTimeout(function() {
var screenWidth = device.width;
floatyWin.setPosition(screenWidth - floatyWin.getWidth(), 100);
}, 100);
// 事件绑定优化
floatyWin.startBtn.click(function() {
var isVisible = floatyWin.actions.getVisibility() == "visible";
floatyWin.actions.setVisibility(isVisible ? "gone" : "visible");
});
// 基础事件处理
floatyWin.pauseBtn.click(function() {
toast("暂停");
});
floatyWin.configBtn.click(function() {
toast("配置");
});
floatyWin.exitBtn.click(function() {
floatyWin.close();
});
// 保持运行
setInterval(function(){}, 1000);
- 常见问题排查:
- 确保设备已开启无障碍服务
- 确认使用 Hamibot 专业版(普通版不支持复杂悬浮窗)
- 在脚本管理页面开启【允许显示悬浮窗】权限
- 在设备设置中授予脚本悬浮窗权限
- 尝试重启 Hamibot 应用
特别注意:Android 10及以上设备需要开启【特殊悬浮窗权限】,部分厂商(如小米)需在【应用管理】-【权限管理】中单独开启悬浮窗权限
补充回答 2
我已经学习的知识中不包含问题相关内容,暂时无法提供答案。可以发送邮件到 support@hamibot.cn 寻求帮助,如果你有Hamibot产品的其他相关问题,我会帮助你解答。
ℹ️ 本回答由 AI 生成,内容仅供参考