【Android学习笔记】onInterceptTouchEvent()、onTouchEvent()
来源:互联网 发布:手机上可以开淘宝网店 编辑:程序博客网 时间:2024/04/30 21:45
转自:http://www.cnblogs.com/hundan/archive/2011/08/27/2155442.html
一、资源:
MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
ANDROID事件触发机制,针对于由于触摸(Touch)而触发的事件。
二、重点
- 首先要明确onInterceptTouchEvent()这个方法只针对于ViewGroup,事件传到ViewGroup一般先触发onInterceptTouchEvent(),View是没有这个方法的
- 具体传递的流程见资源1,很详细,对理解很有帮助
- onInterceptTouchEvent()改变事件传递的方向
- false->下一个对象
- true->本对象
- 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学习笔记】onInterceptTouchEvent()、onTouchEvent()
- android dispatchTouchEvent,onInterceptTouchEvent和onTouchEvent学习
- android onInterceptTouchEvent()和onTouchEvent
- Android onInterceptTouchEvent setOnChangedListener onTouchEvent
- android onInterceptTouchEvent onTouchEvent
- android onInterceptTouchEvent和onTouchEvent
- Android onInterceptTouchEvent()和onTouchEvent()
- Android-onInterceptTouchEvent()和onTouchEvent()
- 【Android】【触摸】onInterceptTouchEvent(),onTouchEvent()
- 【android】onInterceptTouchEvent与onTouchEvent
- android onTouchEvent和onInterceptTouchEvent区别
- Android-onInterceptTouchEvent()和onTouchEvent()总结
- Android中onInterceptTouchEvent与onTouchEvent
- Android中onInterceptTouchEvent与onTouchEvent
- android-onInterceptTouchEvent()与onTouchEvent() - 随心
- Android中onInterceptTouchEvent与onTouchEvent
- Android中onInterceptTouchEvent与onTouchEvent
- Android中onInterceptTouchEvent与onTouchEvent
- 架构师
- 让你当时就震惊的PC用户的行为
- 分析IBinder体系中getService
- 跳转到系统默认的Home
- 使用LINQ读取RSS,比传统的C#2.0方法节省了很多代码
- 【Android学习笔记】onInterceptTouchEvent()、onTouchEvent()
- 自定义Android的Spinner
- _ConnectionPtr _CommandPtr _RecordsetPrt
- C++ Primer 中文版 学习笔记(三)
- 如何克服拖延症
- 归档
- SCSI热拔插
- Java软件架构设计
- 值类型 引用类型 ref out