background image

感兴趣了

.

 那么后续事件就会直接给此方法对应的 ViewGroup 的 onTouchEvent 方法来处理事件了.

(3) 如果此方法一开始返回 false,说不感兴趣这个时候事件发给了目录 View.

   现在又返回 true,说感兴趣了.那么目录 View 就会收到一个 action 为 ACTION_CANCEL
的事件

.

    跟此方法返回 true 时的事件是同一个事件 ,只是 action 变了.

(4) ViewGroup 会在这里接收触控开始的事件.

规则就是上面这些

 ,那么是谁在后面处理这些规则呢?

就是

ViewGroup.它在 disptachTouchEvent 方法中,进行了一系列的处理来实现这种模型.

 public boolean dispatchTouchEvent(MotionEvent ev)

 对于单独的 View 本身来说,它也有一个简单的事件派发模型.通过以下代码就可以很
明白的看出来了

:

View#dispatchTouchEvent(MotionEvent event):

?

1
2
3
4
5
6
7
8
9

ListenerInfo li = mListenerInfo;

if

  (li  != 

null

  &&  li.mOnTouchListener  != 

null

  &&  (mViewFlags  &  ENABLED_MASK)  == 

ENABLED
        && li.mOnTouchListener.onTouch(

this

, event)) {

    

return

 

true

;

}
 

if

 (onTouchEvent(event)) {

    

return

 

true

;

}

 二: Activity 与 View 的事件模型

   事件先到 Activity 中,然后 Activity 调用:

?