点击事件的分发过程由三个很重要的方法来共同完成:dispatchTouchEvent,onInterceptTouchEvent和onTouchEvent,
dispathchTouchEvent用来进行事件的分发,如果事件可以传递给当前view,那么此方法一定会被调用,返回结果受到当前view的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是否消耗当前事件。
onInterceptTouchEvent用来判断是否拦截某个事件,如果当前view拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件。
onTouchEvent在dispatchTouchEvent方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接到事件。
当我们为view设置onTouchListener和OnclickListener时,onclik,onTouch,OntouchEvent,调用顺序是什么样的呢?首先会调用onTouch,这个事件如何处理要看onTouch的返回值,如果返回false,当前view的onTouchEvent方法会被调用,如果返回true,那么oTouchEvent不会被调用,而在onTouchEvent方法中,如果设置有OnClickListener,那么onclik方法才会被调用。可以看出优先级最低的是OnclickListener。
当一个点击事件产生后,它的传递顺序:Activity->Window->View.即不处理就将它传下去。如果都不处理就由activity处理,即activity的onTouchEvent方法被调用。