3

我正在尝试创建类似于 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]);

如果需要更多信息,请告诉我。

4

0 回答 0