一直对这块的知识一知半解,今天找个时间好好理一理。
首先,我们都知道,三个重写的方法
(
onInterceptTouchEvent&dispatchTouchEvent&onTouch
)
都会有返回值。布尔型的,我们可以这样理解
true 表示已消费这个event事件,不会往后传递了。
false 表示没有消费该事件,继续向后传递。
如果各层事件都没有被消费,传递顺序大致是这样的
viewgroup dispatchTouchEvent --> viewgroup onInterceptTouchEvent --> textview onTouch --> viewgroup onTouch
我这边只用两层,一个viewgroup,一个普通的textview,
(如果层级多也是一样,
onInterceptTouchEvent 由最底层viewgroup 往上 逐层拦截,
ontouch 由最上层子view 向下 逐层传递)
如果在viewgroup 某一个事件在onInterceptTouchEvent被消费了,
那后续的事件也不会再传递到onInterceptTouchEvent了。
更不会到子view的ontouch里去。只会到viewgroup这层的ontouch方法里去
如图
如果onInterceptTouchEvent在ACTION_DOWN 的时候没做拦截,在ACTION_UP的时候做拦截
而子view在ACTION_DOWN的时候消费了事件,按流程后续的事件都应该传递到子view这边
,但因为
ACTION_UP事件被viewgroup拦截,所以子view会默认走ACTION_CANCEL这里。当然因为子view在ACTION_DOWN的时候消费了事件,所以viewgroup的ontouch是不会走到的了。
日志如下:
另外写文章的时候遇到一个问题,
viewgroup 的 onInterceptTouchEvent 以及 子view的 onTouch 都返回false,
那么只会走ACTION_DOWN,而ACTION_UP都不会走,按理说应该走。
因为正常点击或者位移事件都是ACTION_DOWN,ACTION_UP,ACTION_MOVE的,既然都不拦截,那后续的事件应该都走完?
网上有人解答说
看的云里雾里的,但这么做的确行得通。不知有哪位大神能通俗的给小弟解释下~
参考
http://my.oschina.net/fengheju/blog/196608?_t=t
http://bbs.csdn.net/topics/380019043
- 大小: 7.9 KB
- 大小: 5.5 KB
- 大小: 13.5 KB
- 大小: 62.3 KB
分享到:
相关推荐
LayoutAnimation为ViewGroup子View添加出现特效
activity view window viewgroup的关系
这是android viewgroup view 源码,有一些注释,此源码仅供学习使用。
安卓事件分发机制测试代码,事件传递从Activity-->ViewGroup-->View。dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent这三个函数的返回值不同,代表的事件传递的不同。
android触屏事件之activity,view,viewgroup
只是一套自定义的view和Viewgroup,都是很简单的代码,为了避免麻烦就上传上来了,看touchevent传递的时候可以在dispatchTouchevent和touchevent中打上断点,调试就行了. 只有dispatchTouchEvent和TouchEvent
onIntercept、onTouchEvent 触摸事件流程
viewgroup view activity onTouch事件分发,Android中提供了ViewGroup、View、Activity三个等级的Touch事件处理。也就是说,这三个地方都有事件回调方法.
本资源提供对于ViewGroup下所以子view的遍历,以及调用Views都过tag或者Widget的类查找返回一个List<View> 使用方法可见示例: 子View遍历 ViewGroup root = (ViewGroup) findViewById(android.R.id.content); ...
自定义View和viewGroup
在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGoup对象和View对象就是控件树中的节点。在控件树中,以树的...
事件传递方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前两个是View和ViewGroup都有的,最后一个是只有ViewGroup才有的方法。这三个方法的作用分别是负责事件分发、事件处理、事件拦截。 ...
http://blog.csdn.net/zxt0601/article/details/50533658 博客资源
自定义ViewGroup---子View可对换位置
一个小Demo,后续可以依据此Demo的思想实现列表进行子控件的切换。
**dispatchTouchEvent():**这个是View的事件分发函数,在ViewGroup中进行重写。在View中其间会调用onTouchEvent(),在ViewGroup中其间会调用onInterceptTouchEvent()和onTouchEvent()。 **...
Touch事件分发中只有两个主角:...ViewGroup的相关事件有三个:onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent。View的相关事件只有两个:dispatchTouchEvent、onTouchEvent。 先分析ViewGroup的处理流程
通过前一篇博客View的事件分发机制,从dispatchTouchEvent说起(一)的介绍相信大家对 Android View 事件的分发机制有了很深的理解。我们知道 Android 中 View 是存在于 Activity。 今天我们继续学习 Activity 到 ...
自定义ViewGroup卡片式页面效果、Horizontalview下标跟随宽度移动改变 主要实现的功能有: Horizontalview的item滑动字体颜色渐变(仿微信)和大小渐变。 Scrollview是重写的ViewGroup,实现的自定义卡片式布局。
NULL 博文链接:https://qq187155685.iteye.com/blog/1442778