大家都知道,onInterceptTouchEvent是做touch事件监听拦截的。在此之前,必须先理清点击事件的顺序。

android的Touch事件分发_layout

从上面可以看到从拦截器onInterceptTouchEvent()执行后,对于onTouchEvent事件的传递时采用向上传递,这里有个设计模式叫什么来着,忘了。

2.现在对onTouchEvent()的返回值简单讲解下:

2.1

如果返回值为FALSE,则只执行ACTION_DOWN ,如果返回至为TRUE,则执行一连串事件的ACTION_DOWN,ACTION_MOVE,ACTION_UP等。

具体对于viewGroup(也就是layout)与view(如btn)的onTouchEvent()默认返回值是不同的。

viewGroup默认返回FALSE , View默认返回TRUE。

也就是viewGroup默认会执行ACTION_DOWN ,而View默认则会调用ACTION_DOWN ,ACTION_MOVE,ACTION_UP等。

2.2

现在说说View的boolean值的额外功能:

当View为false时,通知父容器它还没解决完,需要父容器去继续操作,因此会调用包裹layout的onTouchEvent()

当为true时,则不向上传递信息。

3.看完了onTouchEvent后,对onInterceptTouchEvent来说就显而易见了,因为事件在点击的时候先执行的是onInterceptTouchEvent。所有他可以对刚要被点击的对象做拦截。

默认为False,当回值为TRUE时,只调用其容器的onTouchEvent()。当为FALSE时,则根据具体view

的返回值决定是否向上传播。

-------------------------------------------
接下来谈谈dispatchTouchEvent()。
     我们平时所说的ACTION_DOWN ,ACTION_UP等都为一个事件。他们都会自上而下拦截,并通过消息向上传递。
     当我们点击一个控件,ACTION_DOWN会在以上方法执行一次,紧接着ACTION_MOVE会执行一次或者多次等。  
     ACTION_UP也会在这几个方法执行一次。
4.对于View和Viewgroup,他们都会执行此方法。当一个行为被触发时,该ACTIVITY会触发最外的容器的
dispatchTouchEvent()。dispatchTouchEvent的返回值如果为TRUE,则,直接调用触发View的onTouchEvent,如果为FALSE,则会调用其 onInterceptTouchEvent并决定是否进行拦截。