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

原本以爲ListView的OnScrollListener中onScroll方法可以得出ListView的滾動高度

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

第一個參數AbsListView有getScrollY方法,以爲這個getScrollY的值就是ListView的滑動高度了,但是經過測試getScrollY得到的值一直是0。

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

代碼如下:

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的滾動高度。

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




發佈了7 篇原創文章 · 獲贊 60 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章