这两天看到别人写的事件分发机制文章,光看不中用。于是自己尝试着去实践一波。最后我会贴上本人阅读的文章链接。
- 该图需要从左上开始看
可以根据上图 super 方法流程对比。
由上图我们可以看到,点击事件的分发过程由三个重要的方法来共同完成的。
public boolean dispatchTouchEvent(MotionEvent ev)
用来进行事件的分发。表示是否消耗当前事件。
public boolean onInterceptTouchEvent(MotionEvent ev)
在上述方法内部调用,用来判断是否拦截某个事件,如果当前View拦截了某个时间,那么在同一个事件序列当中,此方法不会再次被调用,返回结果表示是否拦截当前事件。
public boolean onTouchEvent(MotionEvent event)
用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接收到事件。
我们看到这个张动态图,明显可以看到debug的流程。由此可以推断出