事件分发机制

    今天我们来谈谈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初学者,明晚我们再见!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值