view点击事件的分发处理网上已经很多分析的文章了,但描述的不够简洁,用log形式把这个过程描述一下,又由于情况较多,看的让人一头雾水,我这边说说我的简单理解(通过打印log的方式得到的结论,log过程省略)
ViewGroup中三个方法的执行顺序为dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent
dispatchTouchEvent 就是用来阻断自身以及子view的touch事件的,返回true的时候,ViewGroup本身的onTouchEvent和子view的onTouchEvent都不会调用。
onInterceptTouchEvent这个方法只有ViewGroup才有,是用来阻断子view的,也就是说,如果onInterceptTouchEvent返回值为true,ViewGroup本身的onTouchEvent还是会调用,但子view的dispatchTouchEvent等方法都没有调用
onTouchEvent在ACTION_DOWN和ACTION_UP的时候如果简单的返回true或者false,view本身的Click事件不会调用,看源码可知,ACTION_DOWN和ACTION_UP的时候会处理onClick和onLongclick的事件,所以想要View继续响应Click事件的话,需要在ACTION_DOWN和ACTION_UP时调用super.onTouchEvent(event)