Android开发中OnTouchListener接口的返回值问题

return false和return true有何区别呢?

下面就是我在别的文章学习总结来的结论:
1,return false说明你还没消费onTouch事件,在执行完你onTouch里面的代码之后,onTouch事件并没有结束。就是会自动地执行Gallery这个view里onTouch代码(这个为默认).所以这就是为什么没增加你的处理的时候就只自动地调用Gallery的onTouch,若你在onTouch里面增加你的代码并且return false就会执行你的处理和默认的处理。

2,return true说明你已经消费完了onTouch事件,在执行完你的onTouch里面的代码之后,这个onTouch事件就结束了。也就是说不会再调用默认的onTouch事件了。在onTouch里面有很多种的处理比如move,down,up....,若你在move里面return false,那么接着的fling,up等后面的事件也不会处理的。


Java代码  收藏代码
  1. mGallery.setOnTouchListener(new OnTouchListener(){  
  2.   
  3.             //@Override  
  4.             public boolean onTouch(View v, MotionEvent event) {  
  5.                 // TODO Auto-generated method stub  
  6.                 System.out.println("Gallery onTouch");  
  7.                 if(event.getAction()==MotionEvent.ACTION_MOVE){  
  8.                     mDismiss.removeMessages(1);  
  9.                     System.out.println("ACTION_MOVE ");  
  10.                       
  11.                 }else if(event.getAction()==MotionEvent.ACTION_UP){  
  12.                     mDismiss.sendEmptyMessageDelayed(1,10000);  
  13.                     System.out.println("ACTION_UP ");  
  14.                 }  
  15.                 return false;  
  16.             }  
  17.               
  18.         }); 

Android Developers上查看了一下这个接口和这个方法,文档中对该方法的返回值描述如下:True if the listener has consumed the event, false otherwise。大概意思就是说,如果返回true,则表示监听器消耗了该事件(我的理解就是不用继续向上传递该事件了,该事件的传递到此为止);否则返回false。这样一想,我觉得之前返回false,可能造成之后检测到的事件向上传递了,而没有在该监听函数中处理。

posted @ 2016-07-12 09:19  江晓曼博客园  阅读(804)  评论(0编辑  收藏  举报