Android: 屏幕底部坐标超出可见区域

Android: Screen bottom coordinate is beyond visible area

我正在尝试创建允许用手指移动视图的控件。为此,我遵循了 this post.

的建议

但是提供的方法需要一些修改,以防止我的视图移动到屏幕之外。我找到了如何获取 maxYmaxY 坐标 - 对于我的三星 Galaxy A6,它是 1080x1920。但问题是,我的 maxY 超出了设备的可见底部边缘。

所以当达到 Y 大约 1650 时,我的控制几乎消失了。多 300 个像素有什么用。我可以假设,这是 NavigationBar 高度 + 我的控件视图高度,但这也没有按预期放置我的控件。

我用这个方法定义最大坐标。

private void setMaxCoordinates(int viewWidth, int viewHeight) {
    Display display = getWindowManager().getDefaultDisplay();
    Point displaySize = new Point();
    display.getSize(displaySize);
    maxX = displaySize.x - viewWidth;
    maxY = displaySize.y - viewHeight;
}

请帮我定义正确的公式来检测底边坐标。

我找到了解决办法。首先,我在 WindowManager 的帮助下获取底部坐标是错误的。这只是以像素为单位提供屏幕高度,与容器无关。所以要以这种方式检测你的底部坐标,你必须考虑:

  • StatusBar身高。

  • NavigationBar身高。

  • 所有位于容器上方的视图的高度。

  • 您自己的控制视图的高度(ImageView 在我的例子中)。

所以公式看起来像这样。

maxY = windowHeight - (statusBarHeight + navBarheight + allUpperViewsHeight + yourViewHeight)

定义容器 bootom 的正确方法是获取容器的高度并减去控件高度。

maxY = containerHeight - yourViewHeight;