★60.自定义控件 ★17.事件分发机制原理

2017-06-30  本文已影响0人  iDragonfly

View结构

简介

示意图

DecorView

PhoneWindow

事件分发、拦截与消费

类型 相关方法 Activity ViewGroup View
事件分发 dispatchTouchEvent()
事件拦截 onInterceptTouchEvent() X X
事件消费 onTouchEvent()

事件分发流程

流程简介

  1. 事件正向传递View是树形结构的,基于这样的结构,事件收集之后最先传递给Activity,依次向下传递:
    • Activity -> PhoneWindow -> DecorView -> ViewGroup -> ... -> View
  2. 事件反向回传 :如果最后分发到View,如果这个View也没有处理事件,那么会发生 事件反向回传 ,最终传回给Activity,如果最后Activity也没有处理,本次事件才会被抛弃:
    • Activity <- PhoneWindow <- DecorView <- ViewGroup <- ... <- View

情景分析

示意图

情景一:点击View1区域但没有View消费事件。

情景二:点击View1区域且事件被View1消费

情景三:点击View1区域但事件被ViewGroupA拦截

总结

上一篇 下一篇

猜你喜欢

热点阅读