[关闭]
@linux1s1s 2019-02-14T14:30:33.000000Z 字数 898 阅读 2197

Android View 事件分发

AndroidView 2015-06


dispatchTouchEvent

首先需要明确的是:不管你点击Android屏幕上的任何控件,都会调用方法

  1. public boolean dispatchTouchEvent(MotionEvent event )

然后沿着这个事件我们先从View类的这个方法跟踪下去:

此处输入图片的描述

我们从上面的源代码中可以获知,这个方法中首先会有条件的执行:
onTouch(this,event) 方法,如果你设置了View的回调:

onTouch

此处输入图片的描述

接着,如果这个回调返回了false,表示事件没有被消耗,这个时候会继续在 dispatchTouchEvent方法中执行onTouchEvent(event)方法;
如果这个回调返回了一个true,表示事件已经被消耗了,这个时候在方法dispatchTouchEvent 中就不会执行 onTouchEvent(event)方法;

onTouchEvent

接下来我们看一下onTouchEvent(MotionEvent event)方法

此处输入图片的描述

L26行 performClick()方法,我们继续跟下去

此处输入图片的描述

所以这个时候就执行了onclick 回调方法。

小结

这样一来我们就清醒的认识了View的事件传递:

dispatchTouchEvent(MotionEvent event) ---->>> onTouch(this, event) 如果返回false----->>> onTouchEvent(event) ----->>> performClick()

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注