ListView是很常用的控件,相关的API想必大家都是很熟悉的。今天,记录一个滚动相关的接口OnScrollListener。以往,要实现手指触控相关的操作,首先想到的方案是,在onTouch里获取触控相关的信息,并进行相关的逻辑。往后,一些操作,或许可以放到OnScrollListener里实现。好,废话不多说。来详细看这个接口。
OnScrollListener
public interface OnScrollListener {
public static int SCROLL_STATE_IDLE = 0;
public static int SCROLL_STATE_TOUCH_SCROLL = 1;
public static int SCROLL_STATE_FLING = 2;
public void onScrollStateChanged(AbsListView view, int scrollState);
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
int totalItemCount);
}
可以看到,OnScrollListener接口有三个静态滚动状态的变量,及两个要实现的方法。
onScrollStateChanged
滚动状态发生变化时,系统会回调这个方法。滚动状态会被赋值到scrollState,scrollState的值如下:
scrollState值 | 含义 |
---|---|
SCROLL_STATE_IDLE | 不滚动时的状态,通常会在滚动停止时监听到此状态 |
SCROLL_STATE_TOUCH_SCROLL | 正在滚动的状态 |
SCROLL_STATE_FLING | 用力快速滑动时可监听到此值 |
onScroll
滚动过程中会回调此方法。详细的参数含义:
onScroll方法参数 | 含义 |
---|---|
firstVisibleItem | 第一个可视的项,这里是整个item都可视的项。被挡住一点都不符合 |
visibleItemCount | 可视的项的个数 |
totalItemCount | 总item的个数 |
使用方法
直接通过setOnScrollListener就ok。
listView.setOnScrollListener(new AbsListView.OnScrollListener(){
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
ps: OnScrollListener还是很有用的,可以用来实现滑动加载和下拉刷新等,有空会整理出来,如何使用OnScrollListener实现下拉刷新和动态加载。