我正在尝试创建控件,允许用手指移动视图。为此,我会遵循 this post 的建议。
但是提出的方法需要一些修改,以防止我的视图被移动到屏幕之外。我发现如何获得maxY
和maxY
坐标 - 对于我的三星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;
}
请帮我定义正确的公式来检测底边坐标。
答案 0 :(得分:1)
我找到了解决方案。首先,我在WindowManager
的帮助下获得底部坐标是错误的。这只是为您提供屏幕高度(以像素为单位),与容器无关。因此,要以这种方式检测底部坐标,您必须考虑:
StatusBar
身高。
NavigationBar
身高。
所有视图的高度,然后是您的容器。
您自己的控制视图的高度(在我的情况下为ImageView
)。
所以公式看起来像这样。
maxY = windowHeight - (statusBarHeight + navBarheight + allUpperViewsHeight + yourViewHeight)
定义容器引导的正确方法是获取容器的高度并扣除控制高度。
maxY = containerHeight - yourViewHeight;