獲取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).top
和getFirstVisiblePosition()
來綜合計算獲得。
代碼如下:
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!