Android事件分发机制简单理解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XPENGM/article/details/53022879

            鉴 于之前项目出现过事件冲突的情况,主要是头部横向的banner和纵向的滚动的内容区域滑动时候冲突。页面的三大主要控件就最外部的ScrollView,内容区域的ListView,以及横向滚动的ViewPager,这三个控件都是自定义重写实现的,每个控件里面也实现了很多的逻辑。刚开始看晕了。后来了解的整个事件的传递机制后,感觉还是不难的,记录下。

            首先事件都是从最顶端的页面(通俗讲就是activity)一级一级传给自己的子view的。也就是从父控件传给子控件的逻辑。父控件就是容器控件,非容器控件就是子view,当然父控件页可以是子view。逻辑图如下:

           事件就是按这样的顺序来的。我们常涉及到主要方法主要有:

                a.分发事件的dispatchTouchEvent()

                b.拦截事件onInterceptTouchEvent(),

                c.处理触摸事件的onTouchEvent(). 

      首先viewGroup 调用自己dispatchTouchEvent(),该方法返回boolean 类型,true 代表销毁事件,false代表 不传递给子view,也不销毁事件,交给父类onTouch处理。            super.dispatchTouchEvent(ev)代表调用父控件拦截方法onInterceptTouchEvent()处理,该方法也是返回boolean 类型。返回true代表拦截事件,父控件onTouch方法将被调用。想要在具体的控件ontouch 处理逻辑就可以这样控制。返回false代表不拦截事件,传到子view 的dispatchTouchEvent()方法,重复这样的动作。当然以上针对的是正常情况下viewGroup,view也是差不多,只是是非容器控件,也就没onInterceptTouchEvent()方法重写直说。就这样,根据自己的意向想要在哪里控制,就把逻辑写在相应的位置,返回对应的值。就这样,简单记录下,个人理解!!!

            

猜你喜欢

转载自blog.csdn.net/XPENGM/article/details/53022879
今日推荐