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

时间:2017-09-07 16:45:50

标签: android android-screen

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

但是提出的方法需要一些修改,以防止我的视图被移动到屏幕之外。我发现如何获得maxYmaxY坐标 - 对于我的三星Galaxy A6,它的 1080 x 1920 。但问题是,我的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;
}

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

1 个答案:

答案 0 :(得分:1)

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

  • StatusBar身高。

  • NavigationBar身高。

  • 所有视图的高度,然后是您的容器。

  • 您自己的控制视图的高度(在我的情况下为ImageView)。

所以公式看起来像这样。

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

定义容器引导的正确方法是获取容器的高度并扣除控制高度。

maxY = containerHeight - yourViewHeight;