OnScrollListener 是用于监听ListView 和GridView 滑动时候的监听事件。
其回调方法有俩
滑动状态改变的监听 ,注意,是 状态 ⬇️⬇️⬇️
public void onScrollStateChanged(AbsListView view, int scrollState);
滑动进行时的监听
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount);
英文好的可以直接看API,英文差的就往下看。
首先是 onScrollStateChanged 的 scrollState ,光看名字就知道这货一定是个常量,点击 OnScrollListener 源码发现三个常量。
public static int SCROLL_STATE_IDLE = 0;
public static int SCROLL_STATE_TOUCH_SCROLL = 1;
public static int SCROLL_STATE_FLING = 2;
第一个 是 滑动停止 时候返回的 状态。
第二个 是 滑动进行时,而且你的手指还在屏幕上 回调的。
第三个 是 滑动进行时,手指已经不再屏幕上回调的。
然后是onScroll方法,这个函数会在滑动时候 回调。这个函数比较简单,光从常量的名字上就能猜到,我这里就简单的翻译一下了。
firstVisibleItem 屏幕可见的第一条 item的下标
visibleItemCount 屏幕中可以见看见的item 条数\
totalItemCount ListView或者GridView中Adapter数据的总条数
下面来验证一下
Android代码大概长这样
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
data = new ArrayList<String>();
mAdapter = new MainAdapter(data, this);
for (int i = 'a'; i < 'z'; i++)
{
data.add(((char) i) + "");
}
mMainLv.setAdapter(mAdapter);
mMainLv.setOnScrollListener(this);
}
1. ListView处理处于最上面,也是显示的第一条数据时,向上滑动
可以看到 onScroll 最先执行,然后才是状态的改变
第一条 Item 下标 ----> 0
当前屏幕显示 ----> 9
adapter的总条数----->25
状态 为 1 ——》2 ——》0
翻译一下
状态 为 滑动且手指在屏幕-----》滑动-----》停止
2.向下滑动几个item的距离
...此处略过
可以看到除了调用了茫茫多的 onScroll 意外,状态仅仅为 1 ---> 0 ,因为没有多余的滑动,手指离开及停止
3. 猛的向下滑动
...同上
(图片上次好似失败了 - - .)
除了茫茫多的onScroll ,状态顺序和 第一次滑动的顺序一模一样 。
//基本讲解就到这里,有机会会放上一些实际使用的案例 TODO