ListView使用技巧(三):滑动监听

1、onTouchListener

onTouchListener是View中的监听事件,通过监听ACTION_DOWN、ACTION_MOVE、ACTION_UP这三个事件发生时的坐标,判断用户滑动的方向,在不同的事件中进行相应的逻辑处理。

        listview.setOnTouchListener(new View.OnTouchListener() {
			
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				// TODO Auto-generated method stub
				switch (event.getAction()) {
				case MotionEvent.ACTION_DOWN:
					//触摸时操作
					break;
				case MotionEvent.ACTION_MOVE:
					//移动时操作
					break;
					
				case MotionEvent.ACTION_UP:
					//离开时操作
					break;
				default:
					break;
				}
				return false;
			}
		});

2、onScrollListener

onScrollListener是AbsListView中的监听事件,封装了很多与listView相关的信息,使用起来很灵活

        listview.setOnScrollListener(new OnScrollListener() {
			
			@Override
			public void onScrollStateChanged(AbsListView view, int scrollState) {
				// TODO Auto-generated method stub
				switch (scrollState) {
				case OnScrollListener.SCROLL_STATE_IDLE:
					//滑动停止时
					Log.d("Test", "SCROLL_STATE_IDLE");
					break;
				case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
					//正在滚动
					Log.d("Test", "SCROLL_STATE_TOUCH_SCROL");
					break;
				case OnScrollListener.SCROLL_STATE_FLING:
					//手指用力滑动
					//手指离开listview后由于惯性继续滑动
					Log.d("Test", "SCROLL_STATE_FLING");
					break;
				default:
					break;
				}
			}
			
			@Override
			public void onScroll(AbsListView view, int firstVisibleItem,
					int visibleItemCount, int totalItemCount) {
				// TODO Auto-generated method stub
				//滑动过程一直调用
				Log.d("Test", "onScroll");
			}
		});

可以写一个测试demo观察Logcat输出信息,即非常直观地看到滑动过程各个函数的调用情况。

下面看看onScroll这个回调方法,这个方法在listview滚动过程中一直调用,三个参数分别为:

firstVisibleItem:当前能看见的第一个Item的ID

visibleItemCount:当前能看见的Item总数

totalItemCount:整个listview的item总数

如果需要判断当前是否滚动到最后一行,方法是:当前可视的第一个item的ID加上当前可视item的和等于item总数的时候,即滚动到了最后一行。

if(firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount>0)
{
      //滚动到最后一行了。
}

如果需要判断滚动方向:

if(firstVisibleItem > lastVisibleItemPosition)
{
      //上滑
}else if(firstVisibleItem < lastVisibleItemPosition)
{
      //下滑
}
lastVisibleItemPosition = firstVisibleItem;


ListView也提供了一些封装的方法来获得当前可视的Item的位置等信息。

mListView.getLastVisiblePosition();
mListView.getFirstVisiblePosition();


你可能感兴趣的:(ListView使用技巧(三):滑动监听)