本文转自:http://www.cnblogs.com/kingcent/archive/2011/03/08/1977059.html

图解见:http://www.cnblogs.com/jqyp/archive/2012/04/25/2469758.html

首先,这篇文章仅仅针对于由于触摸(Touch)而触发的事件。

Android的事件:onClick, onScroll, onFling等等,都是由许多个Touch组成的。其中Touch的第一个状态肯定是ACTION_DOWN, 表示按下了屏幕。之后,touch将会有后续事件,可能是:

  • ACTION_MOVE //表示为移动手势

  • ACTION_UP //表示为离开屏幕

  • ACTION_CANCEL //表示取消手势,不会由用户产生,而是由程序产生的

一个Action_DOWN, n个ACTION_MOVE, 1个ACTION_UP,就构成了Android中众多的事件。

在Android中,有一类控件是中还可以包含其他的子控件,这类控件是继承于ViewGroup类,例如:ListView, Gallery, GridView。

还有一类控件是不能再包含子控件,例如:TextView。

本文的主要讨论对象就是ViewGroup类的控件嵌套时事件触发情况。

对于ViewGroup类的控件,有一个很重要的方法,就是onInterceptTouchEvent(),用于处理事件并改变事件的传递方向,它的返回值是一个布尔值,决定了Touch事件是否要向它包含的子View继续传递,这个方法是从父View向子View传递。

而方法onTouchEvent(),用于接收事件并处理,它的返回值也是一个布尔值,决定了事件及后续事件是否继续向上传递,这个方法是从子View向父View传递。

touch事件在 onInterceptTouchEvent()和onTouchEvent以及各个childView间的传递机制完全取决于onInterceptTouchEvent()和onTouchEvent()的返回值。返回值为true表示事件被正确接收和处理了,返回值为false表示事件没有被处理,将继续传递下去。

ACTION_DOWN事件会传到某个ViewGroup类的onInterceptTouchEvent,如果返回false,则DOWN事件继续向子ViewGroup类的onInterceptTouchEvent传递,如果子View不是ViewGroup类的控件,则传递给它的onTouchEvent。

如果onInterceptTouchEvent返回了true,则DOWN事件传递给它的onTouchEvent,不再继续传递,并且之后的后续事件也都传递给它的onTouchEvent。

如果某View的onTouchEvent返回了false,则DOWN事件继续向其父ViewGroup类的onTouchEvent传递;如果返回了true,则后续事件会直接传递给其onTouchEvent继续处理。(后续事件只会传递给对于必要事件ACTION_DOWN返回了true的onTouchEvent)

总结一下就是:onInterceptTouchEvent可以接受到所有的Touch事件,而onTouchEvent则不一定。

更多相关文章

  1. Android系统开发—对View的clipChildren,clipToPadding,importan
  2. Android日期空间(DatePickerDialog)中的年月日不全部显示
  3. Android(安卓)layout xml总结
  4. 【转载】Android事件分发机制完全解析,带你从源码的角度彻底理解(
  5. Android(安卓)Notification通知栏、点击事件、悬浮通知的简单实
  6. Android中Touch手势分发
  7. Android(安卓)中文API (94) —— MediaController
  8. Android(安卓)下拉刷新控件的使用
  9. Android(安卓)中的各种控件

随机推荐

  1. Android(安卓)Content Provider的共享数
  2. Android(安卓)4.0 的镜像文件
  3. Android中ActivityLifecycleCallbacks监
  4. sqlite alter table添加多列
  5. Android(安卓)4.1-4.2 默认窗体旋转180
  6. 深入源码分析non-sdk并绕过Android(安卓)
  7. Android多媒体编程——MediaPlayer播放音
  8. android实现聊天页面的气泡
  9. android UiAutomator生成测试报告的基本
  10. Android文件上传,PHP端接收