PS:很久没有写博客了,项目正式开始启动了,可是怎么也打不起精神来...可能仍是不适应放假留校...这下一年只能回家一次了...伤感...写篇博客舒坦下...java
学习内容:android
Android中dispatchTouchEvent和OnInterceptTouchEvent和OnTouchEvent三个方法之间的联系...这三个方法研究了整整一个下午,也没有理解的特别的好...说实话,java的源代码我始终都没有看懂到底是怎么个调用过程...不过仍是把本身理解的结果写一下把...
函数
这三个方法是相互关联的,表示的是Android中触摸事件的分发过程...这个触摸事件通常设计到三个过程,DOWN按下操做,MOVE移动操做,UP抬起操做,有的时候MOVE操做能够没有...首先咱们须要理解一个很是重要的问题就是Android如何对触摸事件进行捕获,分发,和响应的过程,没有了这个过程咱们彻底不知道这三个事件是怎么一回事...我简单的先放上一张图片..学习
这张图片反映了完整的触摸事件发生,分发,以及响应的一个过程...我简单的阐述这个过程的实现:当咱们按下屏幕出发ACTION_DOWN操做的时候,那么dispatchTouchEvent()方法就被启动了,这个方法经过调用OnInterceptTouchEvent来判断,本层的View是否进行拦截...若是进行拦截,那么这个ACTION_DOWN操做的响应只会在本层的View中进行响应..而后对ACTION_DOWN进行消费...若是ACTION_DOWN操做被消费,那么本层的View还会去响应ACTION_MOVE和ACTION_UP操做...若是没有进行消费,那么就会返回信息,而且不会执行ACTION_MOVE和ACTION_UP操做...估计你们看到这里的时候就会认为(这楼主写的什么玩意...)...其实我刚看的时候也是这样...
spa
咱们拿一个实例来看...不上什么代码...这里上代码也很差理解...咱们就拿咱们手机里的滑屏幕操做来讲...滑屏操做最熟悉不过了,可是咱们你们每每没有注意到,咱们的手机桌面上有不少应用图标...咱们在短期按住桌面图标而后滑动屏幕这个操做咱们也能实现,只要不是长时间按着就能够实现屏幕滑动的效果,并无因为桌面上的图标而受到影响..其实这个例子咱们就很好理解了...在这里把事情交代清楚...(ACTION_DOWN:手按下屏幕...触发dispatchTouchEvent) ,(最外层的ViewGroup:主屏幕),(下一层ViewGroup:桌面图标)...而后咱们的主屏幕调用OnInterceptTouchEvent()函数进行拦截...这里必需要拦截,只有主屏幕进行拦截操做,这样下一层的ViewGroup,也就是桌面图标才不会去对ACTION_DOWN进行响应操做...也就是说,经过拦截后,主屏幕ViewGroup层调用OnTouchEvent进行响应...这样下一层的ViewGroup,也就是桌面图标层就不会有响应操做...我再放两张图...设计
结合这两张图,你们再理解一下,总结一下,只要某一层产生了拦截,那么ACTION_DOWN操做就不会再向子ViewGroup进行传递了...可是响应OnTouchEvent(),也就是这个方法,不必定在本层的ViewGroup进行响应...由于TouchEvent能够向上传递...再上一张图片...
blog
上面的图片就是缘由,由于只有当本层的ViewGroup对ACTION_DOWN进行消费以后才不会向上进行传递,而且当被消费以后,才会去响应ACTION_MOVE和ACTION_UP操做...
事件
总之:图片
android中的Touch事件都是从ACTION_DOWN开始的:博客
单手指操做:ACTION_DOWN---ACTION_MOVE----ACTION_UP
多手指操做:ACTION_DOWN---ACTION_POINTER_DOWN---ACTION_MOVE--ACTION_POINTER_UP---ACTION_UP.