ViewGroup的onInterceptTouchEvent 顾名思义,作用是拦截TouchEvent。
假如有以下布局
在一组TouchEvent中可能出现:
没有View或ViewGroup消费ACTION_DOWN事件,则TouchEvent的传递路径会是:
ACTION_DOWN : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent —> ChildView.onTouchEvent —> ViewGroup2.onTouchEvent —> ViewGroup1.onTouchEvent
由于谁都没有消费ACTION_DOWN事件,后续的MOVE,UP事件将不会传进来。
ViewGroup2拦截且消费了ACTION_DOWN事件,则TouchEvent的传递路径会是:
ACTION_DOWN : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
也即后续的TouchEvent都传递给了ViewGroup2。
ViewGroup2拦截了ACTION_DOWN事件但不消费,而ViewGroup1消费了该TouchEvent,则TouchEvent的传递路径会是:
ACTION_DOWN : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent —> ViewGroup2.onTouchEvent —> ViewGroup1.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onTouchEvent ;
也即后续的TouchEvent都传递给了ViewGroup1。
ChildView先消费了ACTION_DOWN事件,然后满足一定条件时ViewGroup2拦截了TouchEvent,此时无论ViewGroup2是否消费该TouchEvent,TouchEvent的传递路径是:
ACTION_DOWN : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent —> ChildView.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent —> ChildView.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onInterceptTouchEvent && ACTION_CANCEL : ChildView.onTouchEvent ; (满足条件触发ViewGroup2拦截,会传递ACTION_CANCEL给ChildView)
ACTION_MOVE : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
ACTION_MOVE : ViewGroup1.onInterceptTouchEvent —> ViewGroup2.onTouchEvent ;
也即后续的TouchEvent都传递给了ViewGroup2的onTouchEvent,且无论ViewGroup2是否消费该TouchEvent 。
相关推荐
博客配套说明:http://blog.csdn.net/xiaohao0724/article/details/54798908
自定义Viewgroup,其中包括三个listview,但拖拽中间listview的上部,3个listview一起运动。
事件传递方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前两个是View和ViewGroup都有的,最后一个是只有ViewGroup才有的方法。这三个方法的作用分别是负责事件分发、事件处理、事件拦截。 ...
Android中的事件分发机制也就是View与ViewGroup的对事件的分发与处理。在ViewGroup的内部包含了许多View,而ViewGroup继承自View,所以ViewGroup本身也是一个View。对于事件可以通过ViewGroup下发到它的子View并交...
android ViewGroup 事件传递处理流程代码
onIntercept、onTouchEvent 触摸事件流程
前言 今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外... ViewGroup事件传递机制 小结 Activity、View、ViewGroup三者关系 我们都知道Android中
ViewGroup事件分发Demo实验代码,结合博客地址讲解:https://blog.csdn.net/gaoxiaoweiandy/article/details/89882161
只是一套自定义的view和Viewgroup,都是很简单的代码,为了避免麻烦就上传上来了,看touchevent传递的时候可以在dispatchTouchevent和touchevent中打上断点,调试就行了. 只有dispatchTouchEvent和TouchEvent
android中继承ViewGroup用法 android中继承ViewGroup用法 android中继承ViewGroup用法
自定义ViewGroup学习 最简单的模式,显示一个TextView到自定义ViewGroup中
今天我们继续学习 Activity 到 ViewGroup 的事件分发机制。 一、Activity 分发到 ViewGroup 当我们手指触摸到屏幕时,最先接收到事件的肯定是Activity,首先调用的是Activity的dispatchTouchEvent(event),那么我们...
自定义ViewGroup+Adapter
主要介绍了深入解析Andoird应用开发中View的事件传递,其中重点讲解了ViewGroup的事件传递流程,需要的朋友可以参考下
自定义VIewGroup组合控件,包括事件的处理,可以运行,值得学习
使用ViewGroup的导航页面实例.欢迎大家下载学习
经常会遇到触摸事件冲突,比如ViewPager的轮播图跟Fragment的划动事件冲突,或者轮播图跟下拉事件冲突,自定义view的事件处理等,本文章将会详细介绍Activity、View、ViewGroup三者的触摸事件传递机制,传递包括三个...
创建定制的ViewGroup以及理解Android绘制视图的方式
之前笔者其实已经写过事件分发机制的文章:[快速理解android事件传递拦截机制概念](http://blog.csdn.net/double2hao/article/details/51541061) 但是,现在看来其实更像是一篇知识概括,多出可能未讲清楚,于是打算...