windowManager.updateViewLayout不更新视图x和y坐标?

时间:2013-09-02 05:35:25

标签: android android-view android-windowmanager

我正在尝试创建类似于Facebook聊天头的测试应用程序。在这里我使用窗口管理器动态添加和更新视图到屏幕,当用户选择图像时,它应显示包含一些内容的扩展列表。要显示我正在使用弹出窗口类的内容。

当用户选择视图时,我将显示特定位置的展开视图。假设当前视图位置是x = 736& y = 1124.如果用户想要查看内容,那么用户将选择视图,然后我从特定位置重新绘制所有视图,假设x = 700且y = 50,这样我就可以在屏幕上显示空间以显示弹出窗口。 / p>

问题: - 当我使用windowManager.updateViewLayout方法更新视图时,它会更新屏幕上的视图但view.getLocationOnScreen(location)仍会返回旧坐标,因为我的弹出窗口未正确绘制,因为弹出窗口窗口没有足够的空间。

例如: - 我当前的查看位置是x = 736& y = 1124并且一旦用户选择了视图,我将所有视图重新划分到新位置x = 700和y = 50,但是当我执行view.getLocationOnScreen(location)时,我仍然得到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]);

如果需要更多信息,请与我们联系。

0 个答案:

没有答案