个人学习总结:
首先,先介绍一下onInterceptTouchEvent与onTouchEvent,onInterceptTouchEvent是ViewGroup中的方法,该方法有两个作用:1.执行用户按键操作,可将相应按键时间写入其中。2.通过返回值指定过滤方向(是否过滤到子控件还是当前layout层)。onTouchEvent是View中的方法,也有两个作用:1..执行用户按键操作,可将相应按键时间写入其中。2.通过返回值确定传过来的按键事件是否被消费(consume)。
由于ViewGroup继承自View,所以ViewGroup除了onInterceptTouchEvent,还有onTouchEvent,而View只有onTouchEvent方法。在一般开发中,都是ViewGroup中布局若干个View,例如:一个FrameLayout中有一个Button,接下来的例子可以参考:http://blog.csdn.net/android_tutor/article/details/7193090和http://www.cnblogs.com/kingcent/archive/2011/03/08/1977064.html。
前面这两个链接希望各位自己动手去试试,因为其中有些本人不敢苟同,觉得有些描述含糊不清,容易让人产生误解。最主要还是自己动手去发现,但是第一个链接中的例子还是不错的。
总结:1.以上标红处。
2.如果当前层的onTouchEvent消费了按键事件(return true),那么后续的操作将在该层的onTouchEvent中继续执行(如action _up,action_move),如果是子控件的onTouchEvent消费了按键事件,那么后续的操作将回到父控件的onInterceptTouchEvent执行(onInterceptTouchEvent的action _up,action_move);
以下是个人小发现,如果以上能帮助到各位,下面就不用看了。
备注:在试验过程中发现一个“探路”的现象。前提layout<layout1<view,<为包含关系,如果将layout1的onInterceptTouchEvent与onTouchEvent返回值都设置为true,那么点击之后的log是layout.onInterceptTouchEvent.down
layout1.onInterceptTouchEvent.down
layout1.onTouchEvent.down
layout.onInterceptTouchEvent.up
layout1.onTouchEvent.up
下面来分析一下这个log:首先点击以后从layout1.onInterceptTouchEvent.down开始返回false过滤到layout1.onInterceptTouchEvent.down,而layout1.onInterceptTouchEvent.down返回true,拦截在当前层,到
layout1.onTouchEvent.down,(至此,发现layout1就是最后一层,因为layout1.onInterceptTouchEvent.down返回true,所以layout1是叶节点层,down按键事件就是探路的那个探子,因为它发现了layout1是最后一层),而layout1.onTouchEvent.down又返回true,消费了down事件,然后根据总结处的第二条,子控件的onTouchEvent消费了按键事件,那么后续的操作将回到父控件的onInterceptTouchEvent执行,就有了layout.onInterceptTouchEvent.up,而layout.onInterceptTouchEvent.up返回false,理应过滤到layout1.onInterceptTouchEvent.up,但是探子发现layout1就是最后一层,那么就无需走layout1.onInterceptTouchEvent.up,而是直接走的layout1.onTouchEvent.up。
相关推荐
onInterceptTouchEvent与OntouchEvent之间的事件传递机制的具体内涵关系...
关于onInterceptTouchEvent和onTouchEvent使用demo,很不错的一个demo,可以帮助Android的触摸事件。
onInterceptTouchEvent和onTouchEvent调用关系详解
NULL 博文链接:https://2528.iteye.com/blog/1056731
NULL 博文链接:https://username2.iteye.com/blog/2193153
NULL 博文链接:https://yxwww.iteye.com/blog/1409461
onInterceptTouchEvent与onTouchEvent事件传递的分析
本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTouchEvent的区别详解。需要的朋友参考下
onInterceptTouchEvent 和 onTouchEvent 研究
onInterceptTouchEvent ontouchevent 的一个执行顺序和关于返回值的小demo 希望有点用
onInterceptTouchEvent和onTouchEvent调用时序
基于这个猜测,我自定义一个ViewPager,重写dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent,分别在这三个方法中打印log; 重写SlidingMenu的dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent,...
通过代码实践总结dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent的调用流程、顺序、及返回值对事件处理的影响。
侧滑面板(对ViewGroup的自定义) * 应用场景: 扩展主面板的功能 ... 触摸优化: 重写ViewGroup里onInterceptTouchEvent和onTouchEvent Github 大牛 Jake Wharton nineoldandroids.jar 属性动画 ActionBarSherlock
(之前上传的代码有bug,经过作者整理和修改,fix掉部分bug) ...关键技术是理解清楚“onInterceptTouchEvent和onTouchEvent”的关系,以及computeScroll和dispatchDraw等。 可以在百度中搜索关键词获取答案。
onInterceptTouchEvent和onTouchEvent调用时序详解 测试demo 详细介绍请移步:http://blog.csdn.net/yiranxinshou/article/details/9201833
Title : dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三者对MotionEvent的分发、拦截机制分析 Author: yaong Category:自己做的Demo Tips : 三个自定义View,依次嵌套,并各自覆写拦截、监听方法,通过...
安卓事件分发机制测试代码,事件传递从Activity-->ViewGroup-->View。dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent这三个函数的返回值不同,代表的事件传递的不同。
android 事件传递在很多地方被描述的很复杂,难懂,其实只要自己通过代码跟一样程序的执行过程,看一下debug日志输出,就很容易理解了,在本代码里通过更改onInterceptTouchEvent和onTouchEvent的返回值,观查debug...
在自定义ViewGroup中,很多效果都包含用户手指去拖动其内部的某个View(eg:侧滑菜单等),针对具体的需要去写好onInterceptTouchEvent和onTouchEvent这两个方法是一件很不容易的事,需要自己去处理:多手指的处理、加...