今天我们来谈谈Android的事件分发机制。这个话题比较深,但我学得比较浅,我将从一个入门者的角度来介绍。事件分发机制,主要体现在哪呢?例如:我们在实现一个button的监听方法,然后点击按钮就会执行我们的代码,当我们点击其他地方,却没有反应。但当我们实现了Touch中的Down()方法时,无论我们点击屏幕的任何一个地方都只会实现Down()中的方法,不会再执行button的监听方法。这就是Android的事件分发机制。Android系统中会有一个默认的管理事件的一个机制。主要有一下三个方法
1、dispatchTouchEvent - 分发事件,默认为false。true:取消事件,不继续向下分发,false:向下分发事件
2、onInterceptTouchEvent - 拦截事件,默认为false。true:拦截事件,自身的onTouchEvent()方法消费,false:事件继续向下传递
3、onTouchEvent - 处理事件,默认为false,true:消费事件,false:不消费事件,向上层传递让上层处理。【注】如果发生了拦截,那么如果该层不处理则会继续向上传递,让上层处理。如果过程中没有发生处理,则事件分发到底层后将一直向上层传递至Activity,在Activity的onTouchEvent()中处理。【注】如果在设置了setOnClickListener(…)的View或Viewgroup中,返回true则消费事件,会触发onClick事件,如果返回false,则不会触发onClick事件
那么这个机制具体是如何工作的呢?
借住一张图来说明(当我们什么也没做时,是这样的)
如果DOWN事件没有被消费,则后续的MOVE/UP事件将不会传递过来,直接在Activity层处理
如果我们像上面例子,在button中写了监听方法,则是这样的
点击事件会被button拦截并处理。
事件分发机制,就在来处理屏幕点击事件的,他从Activity出发,当Activity中的dispatchTouchEvent()方法允许分发时,这时这个触摸事件就会先出现在根布局这个ViewGroup中,然后再向里层的ViewGroup或View传递,也就是Activity->RootView->子ViewGroup->…..->View。形象一点用一张图片介绍:
好,到这里,事件分发机制的基本知识就介绍完了。是不是觉得非常简单呢!今天主要是在介绍,没有代码实例请见谅。感谢两位大神的博客。大家可以通过他们的博客深入了解Android的事件分发机制
http://www.cnblogs.com/sunzn/archive/2013/05/10/3064129.html#top
http://www.360doc.com/content/15/1124/17/2793098_515511435.shtml
鄙人林小白,Android初学者,明晚我们再见!