转载请注明出处:http://blog.csdn.net/a1018998632/article/details/50571486
看了郭霖大神:android事件分发机制。还有我之前转过的一篇 :View事件的传递。感觉受益匪浅。所以想写点什么来总结一下。
首先是事件分发的几个背景:
背景1:传递函数: dispatchTouchEvent。用于传递事件,本函数被定义在View中,ViewGroup重写了该函数。
背景2:拦截函数:onInterceptTouchEvent。用于拦截事件,本函数被定义在ViewGroup中。
背景3:消费函数1:onTouch。用于传递过来的事件消费掉,本函数是OnTouchLisener里面的需要被重写的函数。
背景4:消费函数2:onTouchEvent。同用于消费事件,本函数被定义于View中,比onTouch晚执行一步,可能不会执行。
源代码和语言上的解析:郭霖大神已经分析的很完美了:奉上链接大家可以去看看
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153761
我则将事件分发机制做成了一张图:大家可以结合上面两篇博客和我之前转载的一篇博客看看:http://blog.csdn.net/a1018998632/article/details/50569113
几个总结:
1.onClick在onTouch之后调用
2.onTouch默认flase
3.一般情况,事件是先传到最底层的子view,若子View不可点击,单机,长按则将事件返回给上一层,否则事件消耗。或者将onTouch指定为true,将事件消耗。
参考文献:
http://blog.csdn.net/guolin_blog/article/details/9097463
http://blog.csdn.net/guolin_blog/article/details/9153761
http://blog.csdn.net/a1018998632/article/details/50569113
http://my.oschina.net/banxi/blog/187267