获取ListView当前滚动的距离(高度)

本来觉得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).topgetFirstVisiblePosition()来综合计算得到。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,使用getTop()方法计算出这个误差。综合起来就能够计算出当前ListView的滚动高度。ci

虽然上面的方法只是适用于listView 的每一个子项高度必定的状况,不过已经解决了大多数问题了。get

相关文章
相关标签/搜索