我看到一个脚本有一个功能是校准按钮,最后得到的结果是837,2315,请问这个坐标是怎么得到的?并且我想知道这个坐标在屏幕中具体的位置是在哪,你能帮我写代码让我运行后能看到坐标吗?
我的意思是我如果也想实现这个校准功能,查找一个按钮的坐标,应该怎么做?
另外我想运行一个脚本,然后再屏幕中显示我预设值的坐标的点在哪个地方,你可以高亮显示或者显示一个悬浮的红点。
脚本代码怎么找到一个控件的X,Y坐标,让我可以直接执行click(X,Y)?
回答
文档地址 https://docs.hamibot.com/
坐标是通过特定的校准功能获取的,这个功能通常用于适配不同分辨率的设备。你可以通过以下代码来查看当前屏幕的分辨率,并计算出对应位置的大致坐标:
// 获取当前屏幕的分辨率
var width = device.width;
var height = device.height;
// 校准后的坐标
var calibratedX = 837;
var calibratedY = 2315;
// 输出当前设备的分辨率
toast("当前设备的分辨率为:" + width + "x" + height);
// 输出校准坐标在当前屏幕上的位置
toast("校准坐标在当前屏幕上的位置为:(" + calibratedX + ", " + calibratedY + ")");
这段代码会显示当前设备的分辨率以及校准坐标的具体数值。你可以在Hamibot中运行它以了解这些信息。
补充回答 1
文档地址 https://docs.hamibot.com/
要实现校准功能并查找按钮的坐标,通常可以通过以下步骤进行:
- 启用开发者选项中的“指针位置”功能:这将帮助你获取屏幕上任意点击位置的坐标。
- 手动点击目标按钮:通过“指针位置”获取按钮中心点的坐标。
以下是你可以运行的脚本,用于在屏幕中高亮显示一个预设坐标的点(例如 837, 2315
),通过一个悬浮的红点来标记该位置。
// 预设的坐标
var targetX = 837;
var targetY = 2315;
// 创建一个悬浮窗来标记坐标位置
var floatyDot = floaty.window(
<frame>
<view id="dot" bg="#FF0000" w="20" h="20" radius="10"/>
</frame>
);
// 设置红点的位置为预设坐标 (居中显示)
floatyDot.setPosition(targetX - 10, targetY - 10); // 减去一半的宽高让红点中心对齐
toast("已显示红点标记坐标 (" + targetX + ", " + targetY + ")");
// 保持悬浮窗显示一段时间 (例如 10 秒)
setTimeout(function () {
floatyDot.close();
}, 10000);
如何启用“指针位置”功能:
- 进入设备的“设置” > “关于手机”。
- 点击“版本号”多次以启用“开发者选项”。
- 返回“设置”,进入“系统和更新” > “开发人员选项”。
- 启用“指针位置”选项。打开后你会在屏幕底部看到实时的坐标信息。
如何手动校准按钮坐标:
- 打开你要校准的应用,并导航到需要校准的按钮界面。
- 打开“指针位置”功能。
- 手动点击按钮中心区域,记下“指针位置”显示的坐标值。
- 在你的脚本中使用这些坐标。
如果你希望将这一过程自动化,可以结合无障碍服务遍历控件边界,但这种方式更复杂,适合特定需求。如果需要进一步帮助,请告诉我具体场景!
补充回答 2
文档地址 https://docs.hamibot.com/
在 Hamibot 中,如果你需要找到一个控件的坐标并直接执行 click(x, y)
,可以通过无障碍服务查找控件并获取其边界信息。下面是一个完整的示例脚本,展示了如何找到一个控件的中心点坐标,并使用 click(x, y)
点击它。
// 自动等待目标控件出现
var widget = text("微信").findOne();
// 获取控件的边界(bounds)信息
var bounds = widget.bounds();
// 计算控件的中心点坐标
var x = bounds.centerX();
var y = bounds.centerY();
// 输出坐标信息到日志
log("控件中心坐标:(" + x + ", " + y + ")");
// 执行点击操作
click(x, y);
说明:
text("微信").findOne()
:查找文本为“微信”的控件,脚本会一直等待直到找到该控件。widget.bounds()
:获取控件在屏幕上的边界矩形(包含 left、top、right、bottom)。bounds.centerX()
和bounds.centerY()
:计算控件的中心点坐标。click(x, y)
:在计算出的坐标上执行点击。
你可以将 "微信"
替换为你需要查找的控件的任意特征,例如:
id("button_id").findOne()
desc("描述内容").findOne()
className("android.widget.Button").findOne()
注意事项:
- 请确保已经授予 Hamibot 的无障碍服务权限。
- 控件必须出现在当前界面才能被找到,否则脚本会一直等待。
- 如果控件是动态生成或异步加载的,建议加上超时处理或者判断是否存在。
如果你需要一次性找到多个控件并批量点击它们的中心点,也可以使用如下代码:
// 查找所有文本为“微信”的控件
var widgets = text("微信").find();
// 遍历所有找到的控件并点击它们的中心点
for (var i = 0; i < widgets.length; i++) {
var bounds = widgets[i].bounds();
var x = bounds.centerX();
var y = bounds.centerY();
log("点击第 " + (i + 1) + " 个控件,坐标:(" + x + ", " + y + ")");
click(x, y);
sleep(500); // 每次点击后稍作延迟
}
通过这种方式,你就可以精确地定位控件并执行点击操作了。