不管是viewGroup自己处理事件,还是view处理事件,如果没有被子类拦截(子类重写方法),最终都会调用到 view.dispatchTouchEvent 方法来处理事件。view处理事件的逻辑就比viewGroup简单多了,因为它不需要向下去分发事件,只需要自己处理。整体的逻辑如下:
首先判断是否被其他非全屏view覆盖。这和上面viewGroup的安全性检查是一样的
经过检查之后先检查是否有onTouchListener监听器,如果有则调用它
如果第2步没有消费事件,那么会调用onTouchEvent方法来处理事件
这个方法是view处理事件的核心,里面包含了点击、双击、长按等逻辑的处理需要重点关注。