Android: 屏幕底部坐标超出可见区域
Android: Screen bottom coordinate is beyond visible area
我正在尝试创建允许用手指移动视图的控件。为此,我遵循了 this post.
的建议
但是提供的方法需要一些修改,以防止我的视图移动到屏幕之外。我找到了如何获取 maxY
和 maxY
坐标 - 对于我的三星 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;
我正在尝试创建允许用手指移动视图的控件。为此,我遵循了 this post.
的建议但是提供的方法需要一些修改,以防止我的视图移动到屏幕之外。我找到了如何获取 maxY
和 maxY
坐标 - 对于我的三星 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;