检测应用程序何时完全绘制并可见

时间:2015-12-10 09:57:00

标签: android android-layout

简而言之,我需要知道应用程序的启动何时完成,即确切地将应用程序完全绘制并且对用户可见。

ViewTreeObserver.OnGlobalLayoutListener()有单一方法 - onGlobalLayout()。 我看到它被多次调用,但我无法检测每个特定调用背后的原因。通常在应用程序可见之前调用2-3次。因此,我需要知道在每次启动应用程序时是否会调用2次或3次或者X次,所以我认为每次调用onGlobalLayout()的原因都有助于确定这一点。

但如果有更好的方法来完成这项任务,我不会坚持使用onGlobalLayout(),所以请随意提供其他可能性。

2 个答案:

答案 0 :(得分:2)

是的,有更好的方法。你非常接近它。

view.getViewTreeObserver().addOnPreDrawListener(myListener);

一旦测量完整的UI并进行布局,就会调用此回调。在此回调之后,绘图操作将立即发生。

使用方面的特别说明:

  • 来自侦听器onPreDraw方法必须返回true,否则绘图操作不会发生。
  • 如果您只需要拨打一次,请不要忘记从onPreDraw方法中删除监听器。 view.getViewTreeObserver().removeOnPreDrawListener(myListener);或者你不断为每次抽奖操作一次又一次地打电话。

答案 1 :(得分:1)

我认为你的方向是错误的。

你应该试试.post(Runnable action)

假设linearLayout1应该最后绘制,那么你应该试试这个......

linearLayout1.post(new Runnable() {

    @Override
    public void run() {// will be call when linearLayout1 will be completely loaded
        // TODO Auto-generated method stub
        //you can write your code here
    }
});