2、Activity.onTouchEvent 方法事件传递机制
事件来源 :
① 布局容器 ViewGroup 的 dispatchTouchEvent 方法返回 false ;
② 布局容器 ViewGroup 的 onTouchEvent 方法返回 false / super.onTouchEvent(event) ;
事件分发 : 这是事件传递的终点, 返回值无所谓
① 返回 true 说明事件被消费了 ;
/** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 布局容器 ViewGroup 的 dispatchTouchEvent 方法返回 false * 布局容器 ViewGroup 的 onTouchEvent 方法返回 false / super.onTouchEvent(event) * 事件分发 : 这是事件传递的终点, 返回值无所谓 * 返回 true 说明事件被消费了 * * @param event * @return */ @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }
三、ViewGroup 的事件传递
1、ViewGroup.dispatchTouchEvent 方法事件传递机制
/** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 从 Activity 的 dispatchTouchEvent 传递而来 * 从父容器 ViewGroup 的 dispatchTouchEvent 传递而来 * 事件分发 : * 如果返回 true, 表示事件被消费, 停止传递 * 如果返回 false, 则传递给父控件的 onTouchEvent 方法 * 如果返回 super.dispatchTouchEvent(ev) , 则继续向下传递到 onInterceptTouchEvent 方法 * * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); }
2、ViewGroup.onInterceptTouchEvent 方法事件传递机制
/** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 从 本类 的 dispatchTouchEvent 方法传递而来 * 事件分发 : * 返回 true, 则停止向后传递, 执行本类的 onTouchEvent 方法 * 如果需要拦截, 返回true * 返回 false / super.onInterceptTouchEvent(ev), * 则继续向 子容器/子组件 的 dispatchTouchEvent 方法传递; ( 这里是子组件 ) * 默认不拦截 * * @param ev * @return */ @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); }
3、ViewGroup.onTouchEvent 方法事件传递机制
/** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 本类的 onInterceptTouchEvent 方法返回 true * 子组件/子容器 的 dispatchTouchEvent 方法返回 false * 子组件/子容器 的 onTouchEvent 方法返回 false / super.onTouchEvent(event) * 事件分发 : * 返回 true 说明事件被消费了, 不再向下传递 * 返回 false / super.onTouchEvent(event) , 则需要继续向下传递 * 向父容器的 onTouchEvent 传递 * * * @param event * @return */ @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }
四、View 的事件传递
1、View .dispatchTouchEvent 方法事件传递机制
/** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 父容器 ViewGroup 的 onInterceptTouchEvent 如果返回 false / super.onInterceptTouchEvent(ev) * 将事件传递到该方法 * 事件分发 : * 如果返回 true, 表示事件被消费, 停止传递 * 如果返回 false, 则传递给父控件的 onTouchEvent 方法 * 如果返回 super.dispatchTouchEvent(ev) , 则向本类的 onTouchEvent 方法传递 * * @param event * @return */ @Override public boolean dispatchTouchEvent(MotionEvent event) { return super.dispatchTouchEvent(event); }
2、View .onTouchEvent 方法事件传递机制
/** * 针对 ACTION_DOWN 事件分析 : * 事件来源 : * 本类的 dispatchTouchEvent 方法返回 super.dispatchTouchEvent(event) * 事件分发 : * 返回 true 说明事件被消费了, 不再向下传递 * 返回 false / super.onTouchEvent(event) , 则需要继续向下传递 * 向父容器的 onTouchEvent 传递 * * * @param event * @return */ @Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }