2016-01-27 120 views
0

我有一個空的滾動視圖。我用吹氣創建一個文本視圖,將其添加到滾動型編程,然後做:Android - 將項目添加到滾動視圖並以編程方式滾動

rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0); 

但隨着觀點尚未測量viewLeft和viewWidth是0。有關如何使其正確滾動視圖的任何建議?

+0

你是如何測量viewWidth? – Sanf0rd

+0

直到現在它作爲固定的文本視圖,我用: int viewLeft = childView.getLeft(); int viewWidth = childView.getWidth(); 但現在我動態添加視圖 – Panos

回答

1

在這篇文章中:getWidth() and getHeight() of View returns 0你有很多很好的選擇來解決這個問題。特別是我用這一個:

聽繪製/佈局事件:ViewTreeObserver

一個ViewTreeObserver被炒魷魚了不同的繪圖事件。通常情況下,OnGlobalLayoutListener是你想要的得到測量,因此在聽者的代碼將在佈局階段之後被調用,所以觀測值準備:

view.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0); 
     } 
    }); 
+0

不完全是,我使用超級視圖來獲取樹觀察者,因爲它更容易,但它似乎工作。謝謝! – Panos

1

smoothScrollBy()調用移動到Runnable,並在添加後將其發送到新的TextView的處理程序,這會在佈局完成後運行。例如:

viewGroup.addView(childView); 
childView.post(new Runnable() { 
     @Override 
     public void run() { 
      rsView.smoothScrollBy((childView.getLeft() + childView.getWidth()/2) - center, 0); 
     } 
    } 
); 

我不知道你是如何計算center,但如果要看的新TextView尺寸,你需要計算移動到Runnable,也是如此。

相關問題