0
点赞
收藏
分享

微信扫一扫

View 的事件分发机制


1. 点击事件的传递规则

点击事件的事件分发,其实就是对 MotionEvent 事件的分发过程,就是一个 MotionEvent 发生以后,系统需要把这个 事件传递给一个具体的 View,这个过程就是 事件分发

1.1 三个核心方法

public boolean dispatchTouchEvent(MotionEvent ev)

用来进行事件的分发。如果事件能够传递给当前View,那么此方法一定会被调用,返回结果受当前 View 的 onTouchEvent() 和下级 View 的 dispatchTouchEvent() 方法的影响。表示是否消耗当前事件

public boolean onInterceptTouchEvent(MotionEvent ev)

在 dispatchTouchEvent 方法内部调用,用来判断是否拦截某个事件,如果当前 View 拦截了某个事件,那么在同一个事件序列中,此方法不会再被调用,返回结果表示是否拦截当前事件

public boolean onTouchEvent(MotionEvent ev)

在 dispatchTouchEvent 方法中调用,用来处理点击事件,返回结果表示是否消耗当前事件,如果不消耗,则在同一个事件序列中,当前 View 无法再次接受到事件

关系用伪代码表示就是:

public boolean dispatchTouchEvent(MotionEvent ev){
boolean consume = flase;
if(onInterceptTouchEvent(ev)){
consume = onTouchEvent(ev);
}else {
consume = child.onInterceptTouchEvent(ev);
}

return


举报

相关推荐

0 条评论