浅谈onInterceptTouchEvent、onTouchEvent与onTouch


  本文标签:Android开发

  一、onTouch

  onTouch是View中OnTouchListener接口中的方法,处理View及其子类被touch是的事件处理  。当然,前提是touch时间能够传递到指定的view  。Q1:为什么会传递不到呢?

  1. /**     
  2.     * Interface definition for a callback to be invoked when a touch event is    
  3.      * dispatched to this view. The callback will be invoked before the touch     
  4.       * event is given to the view.     
  5.       */     
  6.      public interface OnTouchListener {     
  7.          /**     
  8.          * Called when a touch event is dispatched to a view. This allows listeners to    
  9.          * get a chance to respond before the target view.    
  10.          *    
  11.          * @param v The view the touch event has been dispatched to.    
  12.          * @param event The MotionEvent object containing full information about    
  13.          *        the event.    
  14.           * @return True if the listener has consumed the event, false otherwise.    
  15.          */    
  16.          boolean onTouch(View v, MotionEvent event);    
  17.     }  

  二、onTouchEvent

  onTouchEvent同样也是在view中定义的一个方法  。处理传递到view 的手势事件  。手势事件类型包括ACTION_DOWN,ACTION_MOVE,ACTION_UP,ACTION_CANCEL四种事件  。

  1. /**     
  2. * Implement this method to handle touch screen motion events.     
  3.  *     
  4.  * @param event The motion event.     
  5.  * @return True if the event was handled, false otherwise.     
  6.  */     
  7. public boolean onTouchEvent(MotionEvent event) {     
  8.  ……     
  9.  ……    

  一旦onTouchEvent方法被调用,并返回true则这个手势事件就结束了,并不会向下传递到子控件  。Q2:onTouchEvent什么时候被调用呢?

  三、onInterceptTouchEvent

  onInterceptTouchEvent是在ViewGroup里面定义的  。Android中的layout布局类一般都是继承此类的  。onInterceptTouchEvent是用于拦截手势事件的,每个手势事件都会先调用onInterceptTouchEvent  。

  1.  
  2. public boolean onInterceptTouchEvent(MotionEvent ev) {     
  3.         return false;     
  4.  } 

  此方法返回false,则手势事件会向子控件传递;返回true,则调用onTouchEvent方法  。

  原文链接:http://www.cnblogs.com/halzhang/archive/2010/08/18/1802611.html