我有一個空的滾動視圖。我用吹氣創建一個文本視圖,將其添加到滾動型編程,然後做:Android - 將項目添加到滾動視圖並以編程方式滾動
rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0);
但隨着觀點尚未測量viewLeft和viewWidth是0。有關如何使其正確滾動視圖的任何建議?
我有一個空的滾動視圖。我用吹氣創建一個文本視圖,將其添加到滾動型編程,然後做:Android - 將項目添加到滾動視圖並以編程方式滾動
rsView.smoothScrollBy((viewLeft + viewWidth/2) - center, 0);
但隨着觀點尚未測量viewLeft和viewWidth是0。有關如何使其正確滾動視圖的任何建議?
在這篇文章中: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);
}
});
不完全是,我使用超級視圖來獲取樹觀察者,因爲它更容易,但它似乎工作。謝謝! – Panos
將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
,也是如此。
你是如何測量viewWidth? – Sanf0rd
直到現在它作爲固定的文本視圖,我用: int viewLeft = childView.getLeft(); int viewWidth = childView.getWidth(); 但現在我動態添加視圖 – Panos