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

YKMDon 8年前發布 | 9K 次閱讀 Android開發 移動開發

 原本以為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 的每個子項高度一定的情況,不過已經解決了大多數問題了。



 本文由用戶 YKMDon 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!