2011-05-17 17 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 
     } 
    });