项目中用到的onTouchEvent事件小结

1. 概述

由于自己在项目中遇到事件拦截冲突 - [ListView嵌套ListView],所以这篇文章重新记录下事件分发、事件拦截的知识点,一方面用于自己学习和给以后查看做个参考,也希望对遇到诸如此类问题的兄弟做一个参考。

2. 3个方法

1>:dispatchTouchEvent:事件分发,当触摸事件发生时,首先给当前activity执行,即就是当前activity的 dispatchTouchEvent 会被执行;

这个时候,这个方法有3种返回情况:
return true:事件已被处理。被当前的view、或activity处理,到此结束,不会在向下传递;
return false:事件不会被分发。会以冒泡方式传递给上层的 view、或activity的 onTouchEvent 消费;
return super.dispatchTouchEvent(ev):事件会被分发。此时当前view的onIntercepterTouchEvent会判断,是否需要拦截事件;

2>:onInterceptTouchEvent:事件拦截,用于拦截父控件传递过来的事件,用于判断传递过来的父控件事件是否需要被当前view处理;

有3种返回情况:
return true:拦截该事件。把该事件交给当前 view的 onTouchEvent执行;
return false:不拦截、放行该事件。事件会被传递到当前 view 的 子控件中,由当前 子控件中的 dispatchTouchEvent进行处理;
return super.inInterceptTouchEvent(ev):和return true 一样,拦截该事件。把该事件交给 当前 view 的 onTouchEvent执行;

3>:onTouchEvent:当前的 view 把事件拦截了,事件会传递到这个方法中;

有3种返回情况:
return true:消费了该事件,事件到此结束;
return false:没有消费事件,事件会以冒泡方式传递到 最上层的 view 或者 activity,如果最上边的 view 或者 activity没有处理,还是 返回 false,该事件将消失。接下来的所有事件都会被 最上层的view 的 onTouchEvent捕获;
return super.onTouchEvent(event):默认情况,和 return false一样;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容