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