2011-05-17 16 views
1

我的主要活动的视图上有一个ViewFlipper。在onCreate我instante视图添加到ViewFlipper。之后,我将展示的孩子设置为第一个孩子。当点击一个按钮时,我将ViewFlipper的显示子切换到第二个视图。在调用viewFlipper.setDisplayedChild(1)之后,我需要做一些计算并瞬间显示一些基于显示子的宽度和高度的对象。Android ViewFlipper措施的未显示的孩子

这里的主要问题是,在第一时间(秒= 1)显示儿童的观测测量尚未完成。所以我的宽度和高度是0.如果我回去(setDisplayedChild(0)),并返回到第二个孩子没关系(宽度和高度是正确的)。

我对视图的行为做了一些研究,发现有一种方法[onMeasure](http://developer.android.com/reference/android/view/View.html#onMeasure(int, int)),它可以被忽略,一切都可以在这里完成。好吧,它应该如何。其实这是,但问题是,onMeasure在每个视图开关上被调用4次。而我的发现是,第一个和第三个呼叫宽度和高度是全屏大小。第二次和第四次调用是合适的宽度和高度。因为我不得不在这个时候瞬间推出新的对象,所以在onMeasure中这样做是不明智的。

有没有其他的,正确的做法呢? 是否可以强制测量? 我真的需要在屏幕上显示测量结果吗?

问候 Zmeda

回答

3

你的初始化动作(基于宽度和显示孩子的高度)应ViewFlipper的孩子测量之后被调用,就可以实现,使用方法后,例如:

viewFlipper.setDisplayedChild(1); 

    viewFlipper.post(new Runnable() { 
     @Override 
     public void run() { 
      Log.d("test", "w: " + viewFlipper.getCurrentView().getWidth());// not 0 
      //do some calculations and instantate some objects 
     } 
    });