Android视图由两个基类组件组成:View、ViewGroup。与事件相关的有三个主要方法,dispatchTouchEvent,onInterceptTouchEvent,onTouchEvent。那么理解了View和ViewGroup中的这三个方法(View没有onInterceptTouchEvent方法),基本就能清楚Android的时间传递机制。查阅源码最能深刻理解传递过程。
Android视图关系为:ViewGroup包含View或ViewGroup。事件传递入口为ViewGroup.dispatchTouchEvent。
事件分发–ViewGroup.dispatchTouchEvent
上一篇文章做分析
事件拦截–ViewGroup.onInterceptTouchEvent
1 | public boolean onInterceptTouchEvent(MotionEvent ev) { |
一目了然的源代码,一般不做拦截。
事件分发–View.dispatchTouchEvent
1 |
|
总结:如果设置了OnTouchListener,则调用其onTouch方法。若没有设置或没有消费事件,则调用View本身的onTouch方法。
事件处理–ViewGroup.onTouchEvent/View.onTouchEvent
ViewGroup继承于View,ViewGroup没有实现onTouchEvent,所以ViewGroup.onTouchEvent=View.onTouchEvent。
onTouchEvent总结:处理点击事件,按下状态,点击声音