Android事件分发机制简单理解

            鉴 于之前项目出现过事件冲突的情况,主要是头部横向的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()方法重写直说。就这样,根据自己的意向想要在哪里控制,就把逻辑写在相应的位置,返回对应的值。就这样,简单记录下,个人理解!!!

            

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值