父控件调用dispatchTouchEvent,dispatchTouchEvent调用onInterceptTouchEvent,onInterceptTouchEvent返回true,则父控件拦截,如果设置了OnTouchListener,则执行OnTouchListener的onTouch方法,返回true,说明事件被消费,流程结束。如果没有设置OnTouchListener,则执行父控件的onTouchEvent方法,如果返回true,说明事件被消费,流程结束,如果返回false,则递归调用控件的父控件的onTouchEvent方法,返回true,流程结束,返回false,则一直递归调用到Activity。如果onInterceptTouchEvent返回false,则递归调用子控件的dispatchTouchEvent,如果子控件没有拦截,事件流到达最下层空间(即已经没有子控件了),则同样先检查是否设置了OnTouchListener,如果设置了则执行执行onTouch方法,没有,则递归执行父控件的onTouchEvent方法
Android事件分发机制
2021-11-09 03:08:21