Android事件分发-基础原理和场景分析

💡 原文中文,约11600字,阅读约需28分钟。
📝

内容提要

本文介绍了Android中的事件分发机制,事件由上往下传递,如果事件没有被消费则继续传递到下一层,如果事件被消费则停止传递。事件分发是从Activity开始的,关键方法是ViewGroup和View中的相关方法。分发过程中有拦截且拦截后消费,DOWN事件会层层往下分发,直到有拦截后直接交给消费的View进行处理,MOVE和UP事件则会层层往下分发,最后直接交给消费事件的View进行处理,然后层层返回true。

🎯

关键要点

  • Android中的事件分发机制是为了解决用户触摸事件可能落在多个View上的问题。

  • 事件分发从Activity开始,关键方法包括dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent。

  • Activity不拦截事件,ViewGroup负责事件的传递和拦截,View则是事件的最终消费者。

  • 事件分发流程中,DOWN事件会层层往下分发,MOVE和UP事件则会直接交给消费事件的View处理。

  • 事件分发的源头在Activity的dispatchTouchEvent方法,最终通过DecorView传递到ViewGroup和View。

  • ViewGroup的dispatchTouchEvent方法中,只有DOWN事件会寻找消费事件的目标View,其他事件不会再寻找。

  • 事件可以被拦截,拦截后原目标View会收到CANCEL事件,后续将不会再收到任何事件。

  • 分发过程中没有拦截和消费时,MOVE和UP事件会直接传递给Activity的onTouchEvent方法。

  • 分发过程中有拦截且拦截后消费时,DOWN事件会直接交给消费的View处理,MOVE和UP事件也会如此。

  • 分发过程中不拦截DOWN事件但拦截MOVE事件时,之前收到DOWN事件的子View会收到CANCEL事件。

➡️

继续阅读