-
点击事件的传递规则
在介绍点击事件的传递规则之前,首先要明白这里分析的对象是MotionEvent,即点击事件。所谓的事件分发,其实就是对MotionEvent事件的分发过程,即当一个MotionEvent产生以后,系统需要把这个事件传递给一个具体的View,而这个传递的过程就是分发过程。点击事件的分发过程有三个重要的方法共同完成:dispatchTouchEvent,onInterceptTouchEvent和onTouchEvent。
public boolean dispatchTouchEvent(MotionEvent ev)
该方法用来进行事件的分发。如果事件能够传递给当前View,那么此方法一定会被调用,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是否消耗当前事件。可以在该方法中使用requestDisallowInterceptTouchEvent(true)方法(表示该view不拦截事件,将事件分发给子view)
public boolean onInterceptTouchEvent(MotionEvent event)
在dispatchTouchEvent内部调用,用来判断是否拦截某个事件,如果当前ViewGroup拦截了某个事件,那么在同一个事件序列当中,此方法不会被再次调用,返回结果表示是否拦截当前事件
public boolean onTouchEvent(MotionEvent event)
在dispatchTouchEvent方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前View无法再次接收到事件
即View的事件分发调用的方法顺序如下:
1.dispatchTouchEvent()
2.onTouchListener–>onTouch方法
3.onTouchEvent()
4.onClickListener–>onClick方法
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)