我正在尝试创建类似于 Facebook 聊天头的测试应用程序。在此我使用窗口管理器向屏幕动态添加和更新视图,当用户选择图像时,它应该显示包含一些内容的扩展列表。为了显示我正在使用弹出窗口类的内容。
当用户选择视图时,我将显示来自特定位置的扩展视图。假设当前视图位置是 x = 736 & y = 1124。如果用户想查看内容,那么用户将选择视图然后我从特定位置重新绘制所有视图假设 x = 700 和 y = 50 以便我可以获得屏幕中的空间以显示弹出窗口。
问题: - 当我使用 windowManager.updateViewLayout 方法更新视图时,它会更新屏幕上的视图,但 view.getLocationOnScreen(location) 仍然返回旧坐标,因为我的弹出窗口没有正确绘制,因为弹出窗口没有足够的空间在屏幕上。
例如:-我当前的视图位置是 x = 736 & y = 1124,一旦用户选择视图,我会将所有视图重新写入新位置 x = 700 和 y = 50,但是当我执行 view.getLocationOnScreen(location) i我仍然得到 x = 736 & y = 1124。这是不正确的。
解决方案尝试: - requestLayout() 在计算 getLocationOnScreen 之前强制重新绘制屏幕。
expandedParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
expandedParams.gravity = Gravity.TOP | Gravity.LEFT;
expandedParams.x = 700;
expandedParams.y = 50;
for (int i = chatHeadsImageview.size() - 1; i >= 0; i--) {
//getting width of my view
expandedParams.x = expandedParams.x
- chatHeadsImageview.get(i).getWidth();
//Storing current update x location
chatHeadsImageview.get(i).setxOpenChatHeadCordinate(
expandedParams.x);
//Storing current update y location
chatHeadsImageview.get(i).setyOpenChatHeadCordinate(
expandedParams.y);
//updating the view
windowManager.updateViewLayout(chatHeadsImageview.get(i),
expandedParams);
}
int[] location = new int[2];
chatHeadsImageview.get(chatHeadsImageview.size()-1).getLocationOnScreen(location);
System.out.println("getLocationOnScreen x ==> "+location[0]);
System.out.println("getLocationOnScreen y ==> "+location[1]);
如果需要更多信息,请告诉我。