Android事件分发机制详解 | 青训营笔记

96 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第9天

事件的定义

定义:当用户触摸屏幕时。将产生的触摸行为(Touch事件)

  • 事件的类型,有四种

     MotionEvent.ACTION_DOWN 手指刚接触屏幕
    
     MotionEvent.ACTION_UP 手指从屏幕松开
    
     MotionEvent.ACTION_MOVE 手指在屏幕上滑动
    
     MotionEvent.ACTION_CANCEL 非人为因素取消
    

事件序列

正常情况下,一次手指触摸屏幕的行为会发出一些列点击事件 1.点击屏幕立即松开,事件序列化为DOWN->UP 2.点击屏幕滑动一会再松开,事件序列为DOWN->MOVE->...->MOVE->UP 在这里插入图片描述

事件分发对象

在这里插入图片描述

事件分发主要方法

在这里插入图片描述

事件分发-Activity

在这里插入图片描述

事件分发——ViewGroup

在这里插入图片描述

在这里插入图片描述 在这里插入图片描述

事件分发-View

View的事件分发

在这里插入图片描述

View的事件消费

在这里插入图片描述

事件分发模型

在这里插入图片描述

事件分发结论

  • 一个事件序列从手指接触屏幕到手指离开屏幕,在这个过程中产生一系列事件,以DOWN事件开始,中间含有不定数的MOVE事件,以UP事件结束
  • 正常情况下,一个事件序列只能被一个View拦截并且消耗
  • 某个View一旦决定拦截,那么这个事件序列都将由它的onTouchEvent处理,并且它de onInterceptTouchEvent不会再调用
  • 某个View一旦开始处理事件,如果它不消耗ACTION——DOWN事件(onTouchEvent返回false),那么同一事件序列中其他事件都不会再交给它处理。并且重新交由它的父元素处理(父元素onTouchEvent被调用)
  • 事件的传递过程是由外向内的,即事件总是先传递给父元素,然后由父元素分发给子View,通过requestDisallowInterceptTouchEvent方法课在子View中干预父元素的事件分发过程,但ACTION——DOWN除外

image.png

image.png