Android - 等待直到视图放在屏幕上,没有任何猜测

时间:2014-01-21 14:19:28

标签: android viewgroup showcaseview

我正在创建一个TutorialManager来处理应用使用的所有用户辅导。

我有一个ViewGroup可以为自己添加视图,包括在调用onMeasure()后填充项目的GridView。

我正在调用TutorialManagers方法,该方法应该在gridview上执行操作但是它需要知道gridview何时被填充才能使用任何项目

我在添加了所有视图后立即调用的ViewGroup上添加了一个回调方法

问题是TutorialManager需要知道视图的X和Y坐标,以便使用ShowCaseView突出显示它们

我添加了一个使用postDelayed的解决方法(action,100);这似乎适用于我的手机,但如果在某些设备上视图布局需要超过100毫秒呢?它会搞砸整个辅导系统。

除了创建一个具有回调方法的自定义视图之外,我无法想出任何其他方法,该方法在已知视图位置后调用。

处理屏幕上的铺设视图异步发生的问题的常见方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用OnGlobalLayoutListener,只要布局发生更改就会触发(即,您的GridView和子项已经添加并测量。所以,无论您在哪里初始化GridView,都要这样做:

LayoutListener mLayoutListener = new LayoutListener;
mGridView.getViewTreeObserver().addOnGlobalLayoutListener(mLayoutListener);

private class LayoutListener implements OnGlobalLayoutListener {
    @Override
    public void onGlobalLayout() {
        ...Do your calculations here...

        mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this); //If you only need this to execute once.
    }
}

请注意,这会经常被调用。我建议你在不需要的时候尽快删除。