您的位置:首页 > 移动开发 > Android开发

Android ListView监听上滑、下滑、滑到顶部/底部

2015-09-19 23:26 459 查看


监听上下滑有两种方法:


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;
}
});
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: