Android 事件分发机制
1、前言
Android事件分发机制其实分为两个部分,一个分发,一个回传。分发的方法主要是dispatchTouchEvent(),分发顺序是Activity->ViewGroup->View。回传的方法是onTouchEvent(),顺序和分发的相反。不同的是,ViewGroup里面还有一个onInterceptTouchEvent(),用来判断是否进行事件拦截。具体细节看下面一张图。
如果还不清晰,那再来一张图
2、需要注意
学习过程中需要注意的地方有以下几点;1、只要事件在分发的时候没有打断,即在dispatchTouchEvent里面有调用super同名方法,不管patchTouchEvent、onTouchEvent方法返回的是什么,down事件都能收到,但是其后续事件在那个控件里面执行就需要看他们onTouchEvent返回的是true还是false了。2、如果在ViewGroup里面拦截了事件,那么事件就不会在往下分发,而是直接执行本身的onTouch Event事件。这样的话view就执行分发不到down事件,跟谈不上down的后续事件了。3、dispatchTouchEvent和onTouchEvent是有优先级的,比如你在View里面的dispatchTouchEvent设置返回为false,而后在onTouchEvent里面设置为消费即返回true。你猜down的后续事件会在哪里执行?如果View Group里面的onTouchEvent事件返回true就在ViewGroup里面执行。如果返回的是false那么就在activity里面执行。同理想一想,在ViewGroup的dispatchTouchEvent里面返回false,在onTouchEvent里面返回true。down的后续事件在哪里执行呢?对,在activity里面。最后给个例子自己体会一下
3、感谢
本文出自门心叼龙的博客,转载请注明出处: https://blog.csdn.net/geduo_83/article/details/86560896