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

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()方法。这应该就是事件分发的处理流程。

你可能感兴趣的:((事件分发)如何让点击事件和常按事件同时响应?)