-----来源: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处理事件流程图

-----来源:http://www.trinea.cn/android/touch-event-delivery-mechanism/

标注:touch的事件流自己简单做了个demo验证:(Demo地址:https://github.com/alicx/leaf8/tree/androidDemo)

touch事件从Activity的Dispatch开始传递给ViewGroup的Dispatch,在ViewGroup的Dispatch中会先调用onInterceptTouchEvent,

A1: 如果该方法返回true,则表示ViewGroup将拦截该Touch事件,后续将直接调用ViewGroup的OnTouchListener/OnTouchEvent(*标1*onTouchListener总是会优先
onTouchEvent方法调用,如果前者返回true则后者将不会被调用)。
A2:如果该方法返回false,则将会继续传递给View的Dispatch,View作为子节点没有Intercept方法,将直接执行OnTouchListener/OnTouchEvent(如上标1)
基本符合图上流程

更多相关文章

  1. C语言函数以及函数的使用
  2. android的窗口机制分析------事件处理
  3. Android的Touch事件处理机制
  4. Android中设计具有背景图的按钮—ImageButton的焦点及事件处理
  5. android 将鼠标右键点击事件改为点击后返回功能
  6. Android FrameWork——Touch事件派发过程详解
  7. android监听edittext输入事件
  8. 毕设---android按钮事件
  9. Android Recyclerview 滚动事件监听

随机推荐

  1. Android(安卓)百度地图定位指针(系列2)
  2. 【Android】loadData与loadDataWithBaseU
  3. Android(安卓)System Bring Up
  4. 智能手机软件平台 Android(安卓)VS iPhon
  5. Android(安卓)目录选择器实现
  6. Building Android(安卓)notifications 2.
  7. Android(安卓)之获取图片及视频缩略图
  8. android字母导航条实现(原创)
  9. android bluetooth UUID蓝牙查询表
  10. android 简单的音乐播放