里面咱们核心须要探索的是关于View和ViewGroup类中的如下几个处理触摸事件的方法的处理流程。post
ViewGoup: dispatchTouchEvent(); onInterceptTouchEvent(); onTouchEvent()
View:dispatchTouchEvent(); onTouchEvent()
Activity:dispatchTouchEvent(); onTouchEvent()学习2.探索Touch事件的传递机制的意义
经过了解和探究Android Touch事件的传递机制,可让咱们明白触摸事件究竟是怎么产生以及如何被处理的;spa
说明:
1.为了便于理解和整文的清晰明了,本篇文章只是分析一种事件类型:ACTION_DOWN事件的传递过程,置于ACTION_MOVE,ACTION_UP事件会在下一篇文章《一步步探索学习Android Touch事件分发传递机制(二)》中分析。
2.知其然,还须知其因此然,我会在《一步步探索学习Android Touch事件分发传递机制(三)》中,经过分析Android源码来解释探索整个Android Touch事件传递分发机制。设计
如上图,能够看到,我在Activity里面写了三个View(ViewGroup)。ViewGroup1包裹着ViewGroup2,ViewGroup2包裹着一个TextView。这些View都是我自定义的。cdn
注:只有ViewGroup有onInterceptTouchEvent()方法。至于为何这么设计,在后面探索完以后会交代。对象
activity的代码
blog
viewGroup的代码
事件
viewGroup2的代码
图片
view的代码
开发
默认状况下,这些方法都是return super(即父类的默认实现的)。因此先看一下默认状况下,一个ACTION_DOWN事件是怎么传递的。给最里面的View一个触摸,产生ACTION_DOWN事件。
而后咱们探索dispatchTouchEvent()方法,令其return false(这里以ViewGroup2的dispatchTouchEvent()方法为例),log以下:
接着让dispatchTouchEvent()方法return true(这里以ViewGroup2的dispatchTouchEvent()方法为例),log以下:
而后咱们探索一下onTouchEvent()方法,令其return false,(这里以最里层的View的onTouchEvent()方法为例),log以下:
而后咱们让onTouchEvent()方法return true,(这里以最里层的View的onTouchEvent()方法为例),log以下:
最后,咱们来探索onInterceptTouchEvent()方法,令其return false,(这里以最里层的ViewGroup2的onInterceptTouchEvent()方法为例),log以下:
最后,咱们让onInterceptTouchEvent()方法return true,(这里以最里层的ViewGroup2的onInterceptTouchEvent()方法为例),log以下:
1.对于dispatchTouchEvent()方法:
- return true:消费掉事件,终止传递。
- return false: 将事件传递给上一级View的onTouchEvent()方法。若是是Activity的dispatchTouchEvent()方法,则也是消费掉事件,终止传递。
- return super:若是是Activity,则传给下一级view(viewGroup)的dispatchTouchEvent;若是是ViewGroup,则传给本身的onInterceptTouchEvent();若是是View,则传给本身的onTouchEvent().
2.对于onTouchEvent()方法:
- return true:消费掉事件,终止传递。
- return false/super:将事件传递给上一级view的onTouchEvent()方法。
3.对于onInterceptTouchEvent()方法:
- return true:将事件传递给ViewGroup本身的onTouchEvent()方法处理。
- return false/super:将事件传递给下一级View的dispatchTouchEvent()。