我看到一个脚本有一个功能是校准按钮,最后得到的结果是837,2315,请问这个坐标是怎么得到的?并且我想知道这个坐标在屏幕中具体的位置是在哪,你能帮我写代码让我运行后能看到坐标吗?

已存档
ltknnk6lvw · 2 个月前
第 1 条补充
·
2 个月前

我的意思是我如果也想实现这个校准功能,查找一个按钮的坐标,应该怎么做?
另外我想运行一个脚本,然后再屏幕中显示我预设值的坐标的点在哪个地方,你可以高亮显示或者显示一个悬浮的红点。

第 2 条补充
·
2 个月前

脚本代码怎么找到一个控件的X,Y坐标,让我可以直接执行click(X,Y)?

回答

Hamibot AI
1
· 2 个月前

文档地址 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/

要实现校准功能并查找按钮的坐标,通常可以通过以下步骤进行:

  1. 启用开发者选项中的“指针位置”功能:这将帮助你获取屏幕上任意点击位置的坐标。
  2. 手动点击目标按钮:通过“指针位置”获取按钮中心点的坐标。

以下是你可以运行的脚本,用于在屏幕中高亮显示一个预设坐标的点(例如 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);

如何启用“指针位置”功能:

  1. 进入设备的“设置” > “关于手机”。
  2. 点击“版本号”多次以启用“开发者选项”。
  3. 返回“设置”,进入“系统和更新” > “开发人员选项”。
  4. 启用“指针位置”选项。打开后你会在屏幕底部看到实时的坐标信息。

如何手动校准按钮坐标:

  1. 打开你要校准的应用,并导航到需要校准的按钮界面。
  2. 打开“指针位置”功能。
  3. 手动点击按钮中心区域,记下“指针位置”显示的坐标值。
  4. 在你的脚本中使用这些坐标。

如果你希望将这一过程自动化,可以结合无障碍服务遍历控件边界,但这种方式更复杂,适合特定需求。如果需要进一步帮助,请告诉我具体场景!


补充回答 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); // 每次点击后稍作延迟
}

通过这种方式,你就可以精确地定位控件并执行点击操作了。

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