原文地址http://www.trinea.cn/android/touch-event-delivery-mechanism/


介绍Android Touch事件的传递机制

不少朋友私信问到这个问题,那就推荐一篇我看到的对传递机制介绍最清楚的国外文章吧。本文略作翻译。

1、基础知识

(1) 所有Touch事件都被封装成了MotionEvent对象,包括Touch的位置、时间、历史记录以及第几个手指(多指触摸)等。

(2) 事件类型分为ACTION_DOWN, ACTION_UP, ACTION_MOVE, ACTION_POINTER_DOWN, ACTION_POINTER_UP, ACTION_CANCEL,每个事件都是以ACTION_DOWN开始ACTION_UP结束。

(3)对事件的处理包括三类,分别为传递——dispatchTouchEvent()函数、拦截——onInterceptTouchEvent()函数、消费——onTouchEvent()函数和OnTouchListener

2、传递流程

(1) 事件从Activity.dispatchTouchEvent()开始传递,只要没有被停止或拦截,从最上层的View(ViewGroup)开始一直往下(子View)传递。子View可以通过onTouchEvent()对事件进行处理。

(2) 事件由父View(ViewGroup)传递给子View,ViewGroup可以通过onInterceptTouchEvent()对事件做拦截,停止其往下传递。

(3) 如果事件从上往下传递过程中一直没有被停止,且最底层子View没有消费事件,事件会反向往上传递,这时父View(ViewGroup)可以进行消费,如果还是没有被消费的话,最后会到Activity的onTouchEvent()函数。

(4) 如果View没有对ACTION_DOWN进行消费,之后的其他事件不会传递过来。

(5) OnTouchListener优先于onTouchEvent()对事件进行消费。

上面的消费即表示相应函数返回值为true。

更多请直接阅读PDF英文原文:Mastering the Android Touch System,示例代码:Demo@Github。有什么问题可以这里留言。

附上两张原文中流程图

(1) View不处理事件流程图

view-ignore-touch-event-example

(2) View处理事件流程图


更多相关文章

  1. EditText单击触发onclick事件处理
  2. android WebView组件使用总结
  3. 两分钟彻底让你明白Android中onInterceptTouchEvent与onTouchEve
  4. Android(安卓)Touch事件原理加实例分析
  5. Android(安卓)双指同时点击事件模拟
  6. Android的子线程能更新UI吗?
  7. ListView setOnItemClickListener无效原因详细分析
  8. ListView setOnItemClickListener无效原因分析
  9. ListView setOnItemClickListener无效原因详细分析

随机推荐

  1. Android 自定义View之手势解锁控件
  2. 转:android在文本TextView中添加超链接
  3. Android改变wifi状态必须要的权限
  4. Android TextView 如何判断是否已经省略
  5. android 横竖屏判断
  6. android 控件学习笔记 --------ViewPager
  7. 打android的patch
  8. android监听来电去电广播
  9. android的spinner
  10. Android获取手机和应用的相关信息