转自:http://www.cnblogs.com/hundan/archive/2011/08/27/2155442.html
一、资源:
MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
ANDROID事件触发机制,针对于由于触摸(Touch)而触发的事件。
二、重点
- 首先要明确onInterceptTouchEvent()这个方法只针对于ViewGroup,事件传到ViewGroup一般先触发onInterceptTouchEvent(),View是没有这个方法的
- 具体传递的流程见资源1,很详细,对理解很有帮助
- onInterceptTouchEvent()改变事件传递的方向
- onTouchEvent() 用于处理事件,返回值决定当前控件是否消费(consume)了这个事件。
- false->继续下一步处理
- true->已经消费,不继续处理
三、问题思考
1、是不是无论哪种情况下,最后一个发生的onTouchEvent()的返回值均为true?
我做了试验,onTouchEvent()和onTouchEvent()均返回false情况,一个滑动手势只捕捉到了ACTION_DOWN
所以我认为android应该是有个机制,让顶部有效的onTouchEvent自定返回true,按照资源1的描述看来,此后的时间信息都直接传给了最顶部的有效onTouchEvent()处理了。
若顶部有效的onTouchEvent自定返回false的话,那么开始的信息得不到消费,比如Action_DOWN,那后面的动作也没办法触发啊!
2、我感觉onInterceptTouchEvent()其实只能处理Action_DOWN,因为我觉得问题1正确的话,此后的Action_UP,Action_MOVE都会被最后一个有用的onTouchEvent截取?
理由同问题描述,信息最后都汇总到返回true的onTouchEvent哪里,onInterceptTouchEvent()根本没有机会啊。
但是在一些程序中,我确实看到了onInterceptTouchEvent()截取了ACTION_MOVE,ACTION_UP等操作,如何实现的,不解!!
3、实现左右两个屏幕的切换
“我研究了下。 需要往 screen 加 onclick事件,才能两个屏幕这样切换。 没弄懂onInterceptTouchEvent。 为什么要加 onclick呢,因为如果不加,那么 onInterceptTouchEvent return false 也是直接执行 onTouchEvent 而不是继续执行 onInterceptTouchEvent 如果加了onclick,那么 onInterceptTouchEvent return false
会直接执行 onInterceptTouchEvent。 求解答。”
首先得明确onInterceptTouchEvent()是ViewGroup的方法,不是View的方法!
前半句好理解:设当前ViewGroup称为Parent,点击的子View为Child,
所以就算 onInterceptTouchEvent return false它也只能触发Child和Parent的onTouchEvent, 你那个时候Parent.onTouchEvent返回的应该也是true,此后的动作都直接传到Parent.onTouchEvent
后半句无法理解,onclick在onTouchEvent中的ACTION_UP实现(参见下一篇),如果问题1的成立,那么后面的ACTION_MOVE,ACTION_UP都传不到非顶层的函数,所以说问题1是症结所在!!
分享到:
相关推荐
本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTouchEvent的区别详解。需要的朋友参考下
NULL 博文链接:https://yxwww.iteye.com/blog/1409461
关于onInterceptTouchEvent和onTouchEvent使用demo,很不错的一个demo,可以帮助Android的触摸事件。
NULL 博文链接:https://2528.iteye.com/blog/1056731
onInterceptTouchEvent与OntouchEvent之间的事件传递机制的具体内涵关系...
onInterceptTouchEvent和onTouchEvent调用关系详解
NULL 博文链接:https://username2.iteye.com/blog/2193153
onInterceptTouchEvent ontouchevent 的一个执行顺序和关于返回值的小demo 希望有点用
NULL 博文链接:https://geyubin.iteye.com/blog/1633134
onInterceptTouchEvent 和 onTouchEvent 研究
onInterceptTouchEvent和onTouchEvent调用时序
onInterceptTouchEvent与onTouchEvent事件传递的分析
onInterceptTouchEvent和onTouchEvent调用时序详解 测试demo 详细介绍请移步:http://blog.csdn.net/yiranxinshou/article/details/9201833
View的onInterceptTouchEvent(MotionEvent ev)和dispatchTouchEvent(MotionEvent ev) 解析
基于这个猜测,我自定义一个ViewPager,重写dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent,分别在这三个方法中打印log; 重写SlidingMenu的dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent,...
(之前上传的代码有bug,经过作者整理和修改,fix掉部分bug) ...关键技术是理解清楚“onInterceptTouchEvent和onTouchEvent”的关系,以及computeScroll和dispatchDraw等。 可以在百度中搜索关键词获取答案。
安卓事件分发机制测试代码,事件传递从Activity-->ViewGroup-->View。dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent这三个函数的返回值不同,代表的事件传递的不同。
安卓Android事件分发处理 ...主要处理事件分发 和事件消费dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent 3个方法对事件的拦截与否。10分我都觉得少,下不起就别用这么牛逼的自定义,让产品经理换需求。
Title : dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三者对MotionEvent的分发、拦截机制分析 Author: yaong Category:自己做的Demo Tips : 三个自定义View,依次嵌套,并各自覆写拦截、监听方法,通过...