使用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
相关产品推荐
相关产品推荐

