Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

先感谢这两位大哥:Android群英传和http://blog.****.net/xyz_lmn/article/details/12517911

首先说这三个方法

ViewGroup有dispatchTouchEvent、onIterceptTouchEvent、onTouchEvent三个方法

     单纯的View有dispatchTouchEvent、onTouchEvent两个方法

举个例子;

MyViewGroupA-->MyViewGroupB-->MyView这种层级关系下,一次触摸事件。

Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

几个重点:

1.先dispatch,再OnIntercept决定是否拦截,返回false不拦截则继续往下传递

2.这三个方法默认返回都为false。

3.onIntercept返回false表示不拦截---true表示拦截

4.onTouchEvent返回false表示这个事件没有被消费(接收不到接下来的ACTION_MOVE-ACTION_UP事件了

5.dispatch的返回依赖于这个事件是否被处理了。(如果他下面的View消费了这个事件,返回true表示事件分发成功)

6.看网上博客很多说修改dispatch的返回值有表示什么什么什么---如下图。不要去改这个返回值!事件处理这一块修改onIntercept就行了。

Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

如果disPatch返回false表示他下面的子view没有消费这个事件就对了。去改这个方法的返回值容易把人绕晕而且毫无意义。

正确的讲解如下:

感谢这位大哥http://www.jianshu.com/p/24901c309cf4

Android中的dispatchTouchEvent()、onInterceptTouchEvent()和onTouchEvent()

如果要了解ontouchEvent,ontouchListener,onclickListener的执行顺序看下一篇播控