美文网首页
事件分发

事件分发

作者: sweetying | 来源:发表于2018-03-19 22:04 被阅读6次
    事件分发是Android中比较重要的一块知识点,话说很多程序员就是跌倒在这上面,话不多说,
    下面就说一下我的一些理解吧

事件分发我们通常需要重写以下三个方法:

dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()

下面依次介绍一下三个方法的作用:

dispatchTouchEvent()是用来做事件分发的,通常这个方法我们不会去动它,如下图

image.png
返回值的三种情况:
1,返回super.onInterceptTouchEvent(ev),这种情况,事件会往下继续分发
2,返回false,这种情况,事件会终止本条链的分发,但会继续分发
3,返回 true,这种情况,事件则会终止分发

onInterceptTouchEvent()是用来做事件拦截的,通常这个方法只有容器布局中才会有,即ViewGroup,如下图:

image.png
返回值的三种情况:
1,返回super.onInterceptTouchEvent(ev),这种情况,不会对事件进行拦截,事件继续往下分发,其实就相当于返回了false,因为其底层返回的就是false
2,返回false,不会对事件进行拦截,事件继续往下分发
3,返回 true,这种情况,会对事件进行拦截,并做相关处理

onTouchEvent()是用来处理事件的,通常我们如果需要去处理一些因为滑动冲突等问题,我一般会重写该方法,并写一些自己的逻辑,如下图:

image.png
返回值的三种情况:
1,返回super.onInterceptTouchEvent(ev),一般情况下,也是不会对事件进行处理,但如果,该控件重写了如onClick()方法等等,那么事件则会被消费,并不在往下进行传递
2,返回false,这种情况,表示不对事件进行处理,事件继续往下分发
3,返回 true,这种情况,表示对事件感兴趣,并对该事件进行处理.

目前以上所有的图的事件都是针对ACTION_DOWN

总结

1,事件分发可用10个字来概括:隧道式下发,冒泡式上传
2,通常我们都会在onTouchEvent()方法中对事件进行处理,其余两个方法不要动


附送一篇事件分发比较好的文章传送门

相关文章

网友评论

      本文标题:事件分发

      本文链接:https://www.haomeiwen.com/subject/tcqmqftx.html