监听上下滑有两种方法:
1.用ListView的setOnScrollListener方法
//Activity中的初始化
private int lastVisibleItemPosition = 0;// 标记上次滑动位置,初始化默认为0
private boolean scrollFlag = false;// 标记是否滑动
//设置方法
actualListView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//判断状态
switch (scrollState) {
// 当不滚动时
case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 是当屏幕停止滚动时
scrollFlag = false;
// 判断滚动到底部 、position是从0开始算起的
if (actualListView.getLastVisiblePosition() == (actualListView
.getCount() - 1)) {
//TODO
}
// 判断滚动到顶部
if (actualListView.getFirstVisiblePosition() == 0) {
//TODO
}
break;
case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 滚动时
scrollFlag = true;
break;
case AbsListView.OnScrollListener.SCROLL_STATE_FLING:
// 当用户由于之前划动屏幕并抬起手指,屏幕产生惯性滑动时,即滚动时
scrollFlag = true;
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//当滑动时
if (scrollFlag
) {
if (firstVisibleItem < lastVisibleItemPosition) {
// 上滑
//TODO
} else if (firstVisibleItem > lastVisibleItemPosition) {
// 下滑
//TODO
} else {
return;
}
lastVisibleItemPosition = firstVisibleItem;//更新位置
}
}
});
2.用ListView的setOnTouchListener方法
//activity中的初始化
private int mTouchSlop;
private float mFirstY;
private float mCurrentY;
private int direction;
private boolean mShow = true;
//触发移动事件的最短距离
mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop();
//具体方法
actualListView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
mFirstY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
mCurrentY = event.getY();
if (mCurrentY - mFirstY > mTouchSlop) {
direction = 0;// down
} else if (mFirstY - mCurrentY > mTouchSlop) {
direction = 1;// up
}
if (direction == 1) {
//上滑todo
} else if (direction == 0) {
//下滑todo
}
break;
case MotionEvent.ACTION_UP:
break;
}
return false;
}
});