作者:龙娃爸爸3 | 来源:互联网 | 2023-01-09 10:57
1.listview的滑动监听方法主要有两个:一个是OnTouchListener,另一个是OnScrollListener来实现监听。2.OnTouchListenerOnTouch
2.OnTouchListener
OnTouchListener是view中的监听事件,通过监听ACTION_DOWN,ACTION_MOVE,ACTON_UP这三个事件发生时的坐标,就可以根据坐标判断用户滑动的方向,并在不同的事件中进行相应的逻辑处理。
listView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});
OnScrollListener是AbsListView中的监听事件,它封装了许多和listview相关的信息。
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState) {
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
Log.e("keke","OnScrollListener.SCROLL_STATE_FLING");
break;
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:
Log.e("keke","OnScrollListener.SCROLL_STATE_IDLE");
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
Log.e("keke","OnScrollListener.SCROLL_STATE_TOUCH_SCROLL");
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
Log.e("keke","onScroll");
Log.e("keke","firstVisibleItem:" + firstVisibleItem);
Log.e("keke","visibleItemCount:" + visibleItemCount);
Log.e("keke","totalItemCount:" + totalItemCount);
}
});
OnScrollListener中有两个回调–onScrollStateChanged()和onScroll()。onScrollStateChanged()方法根据参数scrollState来决定该方法回调的次数,scrollState有以下三种模式:
OnScrollListener.SCROLL_STATE_FLING:手指离开屏幕的时候,listview仍然处于惯性滑动的状态
OnScrollListener.SCROLL_STATE_IDLE:滑动停止的状态
OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:正在滑动的状态
onScroll()方法会在listview滑动的时候一直调用,该方法中的三个参数记录了当前滑动的状态:
firstVisibleItem:当前能看见的第一个item的ID(从0开始)
visibleItemCount:当前能看见的item的总数,当前能看见的item数目并不是所有的item的数量,只是显示了可以看见的一部分。
totalItemCount:整个listview要显示的item的数目
通过以上的几个参数可以判断是否滑动了最后一个item,亦即
if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount > 0) {
}
还可以判断滑动的方向:
if (firstVisibleItem > lastVisiblItemPosition) {
}else if (firstVisibleItem
}
lastVisiblItemPosition = firstVisibleItem;
其中lastVisiblItemPosition 表示的是记录的是上一次第一个可视的item的ID,并且与当前可视的ditem的ID进行比较,即可知道当前的滚动的方向。