Android事件分发详解(二)——Touch事件传入到Activity的流程
2014-12-29 18:04
405 查看
/** * Demo描述: * Touch事件传入到Activity的流程 * * 设备上Touch事件首先是传递到了Activity,再由Activity传递到 * 外层布局ViewGroup,再到内层ViewGroup,最后直到内层ViewGroup里的某个View. * 这就是事件的传递. * * 在此看一下Touch事件传递到Activity,再由Activity传递到外层布局ViewGroup的过程. * 主要看的还是Touch事件由Activity传递到外层布局ViewGroup的过程 * 1 Touch事件传递到Activity的过程. * 该过程有些复杂,能力有限,看不懂;亦不是应用开发的重点,故略过. * 2 Activity传递Touch事件到外层布局ViewGroup的过程 * 首先会传递到Activity的dispatchTouchEvent()方法,源码如下: * public boolean dispatchTouchEvent(MotionEvent ev) { * if (ev.getAction() == MotionEvent.ACTION_DOWN) { * onUserInteraction(); * } * if (getWindow().superDispatchTouchEvent(ev)) { * return true; * } * return onTouchEvent(ev); * } * * (1)onUserInteraction()方法是空方法,暂且不管. * (2)调用getWindow().superDispatchTouchEvent(ev) * 即调用了PhoneWindow的superDispatchTouchEvent(ev)方法. * @Override * public boolean superDispatchTouchEvent(MotionEvent event) { * return mDecor.superDispatchTouchEvent(event); * } * 在该方法中会调用DecorView的superDispatchTouchEvent(event)方法. * DecorView是一个定义在PhoneWindow中的一个内部类.定义如下: * private final class DecorView extends FrameLayout implements RootViewSurfaceTaker{} * 发现没有,它是继承自FrameLayout的?其实,系统会对任意一个Activity的最外层布局嵌套一个FrameLayout. * 嗯哼,是不是暗示着什么........ * 继续看DecorView的superDispatchTouchEvent(event)方法,源码如下: * public boolean superDispatchTouchEvent(MotionEvent event) { * return super.dispatchTouchEvent(event); * } * 在该方法中方法中调用了super.dispatchTouchEvent(event); * 即调用了FrameLayout(也就是ViewGroup)的dispatchTouchEvent(event); * 剩下的流程就和ViewGroup的事件分发一致了. * (3)如果getWindow().superDispatchTouchEvent(ev)方法返回的false即事件未被消费. * 此时if条件不满足,于是代码继续往下执行那么就会调用onTouchEvent(ev) * 也就是Activity的onTouchEvent(MotionEvent event). * 剩下的流程也不用多说了. * * 参考资料: * http://feelyou.info/analyze_android_touch_event/ * Thank you very much */
相关文章推荐
- Android事件分发详解(一)——Touch事件传入到Activity的流程
- Android事件分发详解(一)——Touch事件传入到Activity的流程
- Android事件分发详解(二)——Touch事件传入到Activity的流程
- Android Touch事件分发详解
- Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习
- Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习
- Android onTouchEvent和onInterceptTouchEvent事件分发详解(一)
- Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习
- Android触控事件分发详解-基本流程
- Android touch事件的分发流程
- Android Touch事件分发机制详解之由点击引发的战争
- android touch事件分发流程
- Android事件分发02——Activity的dispatchTouchEvent验证一把
- Android事件分发详解(五)——Touch事件传递验证
- Android事件分发详解(五)——Touch事件传递验证
- Android TouchEvent事件分发机制详解(1)
- Android事件分发详解(五)——Touch事件传递验证
- Android事件分发详解(三)——ViewGroup的dispatchTouchEvent()源码学习
- Android 触摸事件的分发与处理流程:onInterceptTouchEvent和onTouchEvent
- Android事件分发机制流程详解(二)