事件分发机制,包括:
- Activity事件分发流程
- ViewGroup事件分发流程
- View事件分发流程
1. Activity事件分发流程
2. ViewGroup事件分发流程
ViewGroup中的dispatchTouchEvent函数做的3件事:
- 去判断是否需要拦截事件
- 在当前ViewGroup中,找到用户真正点击的View
- 分发事件到View上
3. View事件分发流程
默认的事件分发流程:
MainActivity:dispatchTouchEvent
MyViewGroup:dispatchTouchEvent
MyViewGroup:onInterceptTouchEvent 验证事件是否需要去拦截(默认不拦截)
MyView:dispatchTouchEvent
MyView:onTouchEvent 默认不消费事件
MyViewGroup:onTouchEvent 默认不消费事件
MainActivity:onTouchEvent
同一个事件序列,如果子View(或ViewGroup)没有处理该事件(没有消费事件),那么后续事件就不会再传递到子View中。
会在MainActivity:dispatchTouchEvent
和MainActivity:onTouchEvent
之间传递
相关问题:
android OnLongClickListener长按事件返回值
public boolean onLongClick(View v)
参数v:参数v为事件源控件,当长时间按下此控件时才会触发该方法。
返回值:该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理;当返回false时,表示并没有完全处理完该事件,更希望其他方法继续对其进行处理。
如果将onLongClick返回false,那么执行完长按事件后,还有执行单击事件。
如果返回true,只执行长按事件