(事件分发)如何让点击事件和常按事件同时响应?

image.png

当按键同时绑定长按和点击事件,根据事件分发机制,长按事件被触发时默认响应完向下传递需要再响应点击事件。

如果事件做了处理,即onLongClick(View view)方法返回true,onclick()事件就被消费掉,不会再向下传递;
onLongClick(View view)方法返回false,onclick()事件就不会被消费掉,会再向下传递就向下传递事件需要触发点击事件。

如果先触发点击事件,就不会触发长按事件。

那么到底什么是事件分发
事件分发
事件分发的对象:用户触摸屏莫而产生的点击事件,包含:按下、滑动、抬起和取消。这些事件被封装成MotionEvent对象。
主要事件如图:

image.png

按下、抬起、滑动、取消这几种事件组成了一个事件流。事件流以按下为开始,中间可能有若干次滑动,以抬起或取消作为结束。
分发事件的组件(分发事件者):Activity、ViewGroup和多个View。

当你触发了任何一个控件的事件,都会调用该控件父类View的diapatchTouchEvent()方法。当我们在onlongclick()事件返回false,onclick监听不为空,View源码中就有调用该控件的onclick()方法。这应该就是事件分发的处理流程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容