盒子
盒子
Posts List
  1. 一. touch事件简述
  2. 二. target过程
    1. dispatchTouchEvent
    2. onInterceptTouchEvent
  3. 三. bubble过程
  4. 四. move ,up 与down 事件处理的区别

android touch事件流程通俗理解

一. touch事件简述

touch事件被分解为三个小事件,按下,移动,弹起,分别对应为ACTION_DOWN,ACTION_MOVE,ACTION_UP。

其中最关键的是ACTION_DOWN的处理,ACTION_DOWN事件处理机制与actionscript的事件处理机制非常相似,由两部分组成:

  • 由上向下的寻找目标的过程,这个过程确定具体的事件处理目标,简称为target过程。
  • 由下往上的事件冒泡过程,这个过程处理事件,简称为bubble过程。

二. target过程

target过程相关的方法有两个

  • dispatchTouchEvent
  • onInterceptTouchEvent

dispatchTouchEvent

dispatchTouchEvent 初始由 activity 开始调用,经过 PhoneWindow , DecorView 最终调用 ViewGroup 的dispatchTouchEvent。 它用于确定触摸事件的目标。(这个逻辑比较简单,遍历ViewGroup的每个孩子,检测是否包含触摸的点,并且自身可触摸)

onInterceptTouchEvent

onInterceptTouchEvent 用于在事件的寻找目标的过程中进行拦截,如果返回值是true表示事件到该viewgroup被拦截。拦截后进行两个处理:

  • 不继续往下传递事件
  • 将事件转入bubble过程。

三. bubble过程

bubble过程会实际处理事件,相关方法有一个

  • onTouchEvent

bubble过程会从当前层开始执行onTouchEvent,如果返回值是true,表示事件被消费,事件不继续向上传递,否则继续向上传递直到被消费,或者最终传递给activity的onTouchEvent。

四. move ,up 与down 事件处理的区别

move 与up 过程已经经过了target的过程,因此仅在目标层的上层判断是否需要拦截该事件,目标层如果是viewgroup,不会执行该层的拦截事件。

支持一下
扫一扫,支持牛头码农