本來覺得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).top
和getFirstVisiblePosition()
來綜合計算得到。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,使用
cigetTop()方法計算出這個誤差。綜合起來就能夠計算出當前ListView的滾動高度。
get雖然上面的方法只是適用於listView 的每一個子項高度必定的狀況,不過已經解決了大多數問題了。