文一:

参考:http://blog.csdn.net/ddna/archive/2010/04/11/5473293.aspx
http://www.cnblogs.com/rocky_yi/archive/2011/01/21/1941522.html#
http://chroya.iteye.com/blog/668297
http://www.blogjava.net/lzqdiy/archive/2011/05/08/349794.html

由于onInterceptTouchEvent()的机制比较复杂,上面的说明写的也比较复杂,总结一下,基本的规则是:
1.       down事件首先会传递到onInterceptTouchEvent()方法
2.       如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。
3.       如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意,目标view将接收不到任何事件。
4.       如果最终需要处理事件的view的onTouchEvent()返回了false,那么该事件将被传递至其上一层次的view的onTouchEvent()处理。
5.       如果最终需要处理事件的view 的onTouchEvent()返回了true,那么后续事件将可以继续传递给该view的onTouchEvent()处理。

文二:

以前写 android ,对事件的处理没有太深入,只是简单的 onTouchEvent 就 ok 了,现在写的 UI ,很多自定义组件,父 view 和子 view 都需要接收事件,然后处理。如果不弄明白它的事件传递机制,很难拥有好的用户体验。

Touchevent 中,返回值是 true ,则说明消耗掉了这个事件,返回值是 false ,则没有消耗掉,会继续传递下去,这个是最基本的。

在 View 中跟 Touch 相关的事件有 dispatchTouchEvent , interceptTouchEvnet , onTouchEvent 三种。dispatchTouchEvent 是负责分发事件的,事件从 activity 传递出来之后,最先到达的就是最顶层 view 的dispatchTouchEvent ,然后它进行分发,如果返回 false ,则交给这个 view 的 interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。

如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。(我说的一次事件指的是 down 到 up 之间的一系列事件)

我画了个图,见附件。

android 事件处理机制_第1张图片

总结一下,如果这一次事件没有人消耗掉,则系统不会给你下一次事件,因为他会认为你这次的事件阻塞了,没必要给下一次。onTouchEvent如果不消耗的话,会从子view传递到父view。



更多相关文章

  1. Android面面观——Android事件处理下(按键、触摸屏和滚动球的一些
  2. Android应用程序键盘(Keyboard)消息处理机制分析(26)
  3. 在Android中,如何通过onTouchEvent实现Double Click,判断为双击事
  4. Android应用程序键盘(Keyboard)消息处理机制分析(22)
  5. Android Button 控件绑定单击事件
  6. [Android实例] Android 开发者面试题-广播机制详解
  7. Android中Touch事件的处理

随机推荐

  1. Android Launcher 分析
  2. Android之RelativeLayout属性
  3. Android 相对布局 RelativeLayout 属性
  4. 创建和使用Android(安卓)library工程
  5. android修改手机虚拟设备管理器路径
  6. android studio 使用adb命令传递文件到an
  7. Android与js交互实例
  8. Unity与Android的互相调用
  9. Android(安卓)平台软件兼容性问题凸显
  10. Android开发进阶:如何读写Android文件