ListView的监听事件

ListView的滑动监听,是ListView中最重要的技巧,很多重写ListView,基本都是在滑动事件的处理上下功夫,通过判断滑动事件进行不同的逻辑处理.为了更加精确地监听滑动事件,我们通常还需要GestureDetector手势识别,VelocityTracker滑动速度的检测等辅助类来完成更好的监听,下面是ListIView的滑动事件的方法,一个是通过OnTouchListener来实现监听,另一个是使用OnScrollListener来实现监听.

-OnTouchListener

onTouchListener是View中的监听事件,通过监听ACTION_DOWN,ACTION_MORE,ACTION_UP.这三个事件发生时的坐标,就可以根据坐标判断用户滑动的方向,并在不同的事件中进行相应的逻辑处理,这种方式的使用代码如下所示.

mListView.setOnTouchListener(new View.OnTouchListener()){
      @Override public boolean onTouch(View v,MotionEvent event){
              swicth(event.getAction()){
                    case:MotionEvent.ACTION_DOWN:
                           //触摸时操作
                           break;
                    case:MotionEvent.ACTION_MOVE:
                           //移动时操作
                           break;
                    case:MotionEvent.ACTION_MOVE:
                           //离开时操作
                           break;
                  }
         }
        return false;
}

-OnScrollListener

OnScollListener是AbsListView中的监听事件,它封装了很多与ListView相关的信息,用起来也更加灵活.首先来看一下OnScollListener的一般使用方法,代码如下所示:

mListView.setOnScrollListener(new AbsListView.OnScrollListener() {    
          @Override   
public void onScrollStateChanged(AbsListView view, int scrollState) {     
       switch (scrollState){         
           case SCROLL_STATE_IDLE:        
                //滑动停止时调用 
                   break;            
           case SCROLL_STATE_TOUCH_SCROLL:           
               //正在滚动时调用 
              break;           
           case SCROLL_STATE_FLING:            
               //手指快速滑动时,在离开ListView由于惯性滑动 
              break;     
      }   
}   
@Override    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {      
      //滚动时一直调用 
   }
 });

OnScrollListener中有两个回调方法-------onScrollStateChanged()和onScroll()

onScrollStateChanged这个方法根据他的参数srrollState来决定其回调的次数,scrollState有三种模式

SCROLL_STATE_IDLE: 滚动停止时
SCROLL_STATE_TOUCH_SCROLL 正在滚动时
SCROLL_STATE_FLING 手指快速滑动时,在离开ListView由于惯性滑动

当用户没有做手指抛动的状态时,这个方法只会回调2次,否则会回调3次,差别就是手指抛动的这个状态,通常情况下,我们在这个方法中通过不同的状态来设置一些Flag,来区分不同的滑动状态,供其他方法处理.

下面这个onScroll()这个回调方法,它在ListView滚动时会一直回调,而方法中的>后三个int类型

firstVisibleItem:当前能看到的第一个Item的ID(从0开始).
visibleItemCount:当前能看到的Item的总数
totalItemCount 整个ListView的Item的总数

这里需要注意的是,当前能看见的Item数,包括没有显示完整的Item,即显示一小半的Item也包括在内.通过这几个参数,可以很方便地进行一些判断.比如判断是否滚动到最后一行,就可以使用如下代码进行判断,当前可视的另一个Item的ID加上当前可视Item的和等于Item总数的时候,即滚动到了最后一行.

if(firstVisibleItem+visibleItemCount==totalItemCount&&totalItemCount>0)
 {    
   //滚动到最后一行,在这里可以处理ListView上拉加载更多 
 }

好了这就是有关ListView的滑动监听.在这里记录下来.希望对大家有所帮助.




原文链接:http://www.jianshu.com/p/5d2c1a621604#

你可能感兴趣的:(android,ListView,手势识别)