Android事件传递机制

来源:互联网 发布:逆战一键瞬狙宏软件 编辑:程序博客网 时间:2024/06/07 11:00

        最近本人在做Android开发的过程中遇到一个问题:侧滑菜单和ListView冲突问题,具体讲就是在ListView中侧滑的时候,侧滑菜单不能响应。然后就粗略的研究了一下Android的事件传递机制,并结合程序不断调试,最终解决了这个问题。现,写下博客一篇警示后人,也避免自己忘记。

1.Android事件传递机制:

首先说一下Android事件传递的机制。要了解这个不得不说一下android中的三个方法。onTouchEvent、 onIntercepTouchEvent 和 dispatchTouchEvent。平时我们捕捉touch事件的代码主要写在Activity中,而Activity中又没有onIntercepTouchEvent,所以我只说一下onTouchEvent和dispatchTouchEvent这两个比较重要的方法。dispatchTouchEvent主要负责事件的分发和传递,而onTouchEvent则负责事件的处理。也就是说,当Activity获取一个Touch事件后,就开始调用dispatchTouchEvent向子控件传递(由外到内),然后子控件调用onTouchEvent进行处理,如果返回True,那么事件到此结束,Activity中的onTouchEvent则触发不了了。如果子控件调用onTouchEvent处理完后返回False,则会触发父控件的onTouchEvent。啰哩啰嗦一大堆,大概就这么个意思。如果还是不懂,下面看图。


2.解决方案:

到此应该基本了解android的事件传递机制了吧。那么如何解决我们的问题呢?

        a、重写ListView的onTouch事件肯定能够解决,但是存在以下问题:

             (1)、太麻烦

             (2)、因为侧滑菜单会对应多个界面,如果采用重写的办法,那么每个对应的页面都要重写其控件的onTouchEvent

        b、在Activity中的dispatchTouchEvent对事件传递进行判断,当为左右滑动的时候,终止传递,当为上下滑动的时候则进行传递。


        总结:本文只是简单陈述了android事件传递机制并提供了解决类似冲突的处理方法。如果想要深入了解android事件传递过程和流程,请参考网络android大神的博客以及android开发文档。



0 0