1、从View上层来说,View的事件处理是从View#dispatchTouchEvent方法开始的。
2、Android系统在处理事件前,需要找到能够处理事件的目标View。寻找方向有点像英文字母中的”U”,先下后上。顶层ViewGroup先接收到事件,然后依次向子View(也有可能是ViewGroup)传递,如果在这个向下过程中没有找到能够处理事件的View,就会再向相反的方向寻找能够处理事件的父ViewGroup。
3、事件传递到顶层的ViewGroup时,顶层ViewGroup具有对事件处理的优先权,可以通过重写ViewGroup#onInterceptTouchEvent方法将事件进行拦截下来自己处理。
4、如果父ViewGroup在MotionEvent#ACTION_DOWN事件时就将事件拦截下来,那么接下来的MotionEvent#ACTION_MOVE与MotionEvent#ACTION_UP都不会再向下传递了,而由该ViewGroup处理。
5、如果某个子View消费了事件,会由ViewGroup#mFirstTouchTarget记录下来,在父ViewGrou不拦截的情况下,接下来的MotionEvent#ACTION_MOVE与MotionEvent#ACTION_UP都会直接传递给它,而不再经历寻找目标View的过程。
6、事件派发到目标View时,会先优先由OnTounchListener#onTouch方法来处理,如果该方法没有消费事件,再由View#onTouchEvent方法来处理。
7、当View为disable时,不会响应OnTounchListener#onTouch方法,但是可以响应View#onTouchEvent方法。
8、当View不为clickable时,不论是enable还是disable,都会消费事件。为false时不会响应事件。
9、View的onClick事件是在onTouchEvent中的MotionEvent#ACTION_UP中响应的。