You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Google Vision库时,为何getLocationOnScreen返回的x值为-180?

关于getLocationOnScreen返回x=-180的排查建议

嘿,我之前也碰到过类似的View坐标异常问题,结合你的情况给你几个实用的排查方向:

  • 确认调用时机是否正确:getLocationOnScreen必须在View完成布局绘制之后调用才会返回正确坐标。如果在onCreate或onStart里直接调用,此时View还没被渲染到屏幕上,就容易出现异常值。你可以试试把调用逻辑放到view.post()里,或者在onWindowFocusChanged方法里执行:
CameraSourcePreview preview = findViewById(R.id.preview);
preview.post(() -> {
    int[] location = new int[2];
    preview.getLocationOnScreen(location);
    // 在这里处理获取到的坐标
});
  • 检查布局嵌套与偏移设置:你的布局是LinearLayout嵌套了CameraSourcePreview,先排查下父布局topLayout或者Preview本身有没有设置translationX、负margin,或者clipToPadding这类可能导致控件偏移的属性。另外可以同时打印父布局的位置,对比看看是不是父布局的偏移带偏了子View的坐标。

  • 尝试切换坐标获取方法:getLocationOnScreen是基于整个屏幕的坐标(包含状态栏),而getLocationInWindow是基于当前窗口的坐标。你可以换成后者试试,看看返回值是否正常,两者的差异可能帮你快速定位问题所在。

  • 确认控件状态与可见性:如果调用getLocationOnScreen时,CameraSourcePreview处于GONE/INVISIBLE状态,或者它的布局宽高设置异常(你的XML里preview的height属性没写完,要确认是match_parent还是其他值),也会导致坐标异常。可以先通过preview.isShown()检查控件是否处于可见状态。

内容的提问来源于stack exchange,提问作者Snake

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:56:17