獲取ListView當前滾動的距離(高度)

本來覺得ListView的OnScrollListener中onScroll方法能夠得出ListView的滾動高度,測試

1
2
public void onScroll(AbsListView view, int firstVisibleItem,
             int visibleItemCount, int totalItemCount) {

第一個參數AbsListView有getScrollY方法,覺得這個getScrollY的值就是ListView的滑動高度了,可是通過測試getScrollY獲得的值一直是0。spa

後來看了網上的一些資料,才知道ListView沒有提供獲得滾動高度的任何方法,必須本身根據getChildAt(0).topgetFirstVisiblePosition()來綜合計算得到。code

代碼以下:orm

1
2
3
4
5
6
7
8
9
public int getScrollY() {
     View c = mListView.getChildAt(0);
     if (c == null ) {
         return 0;
     }
     int firstVisiblePosition = mListView.getFirstVisiblePosition();
     int top = c.getTop();
     return -top + firstVisiblePosition * c.getHeight() ;
}

其原理是假設每一個item的高度是必定的(多數狀況下的確如此),那麼只要知道當前在第幾個item,就能夠計算出總的高度,由於第一個可見item的一部分可能已經移出了邊界,因此再經過mListView.getChildAt(0)得到第一個子view,使用getTop()方法計算出這個誤差。綜合起來就能夠計算出當前ListView的滾動高度。ci

雖然上面的方法只是適用於listView 的每一個子項高度必定的狀況,不過已經解決了大多數問題了。get

相關文章
相關標籤/搜索