本来觉得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 的每一个子项高度必定的状况,不过已经解决了大多数问题了。