您的位置:首页 > 移动开发 > Android开发

android view的事件传递机制学习笔记

2015-12-25 16:43 609 查看

1.view 中的dispatchTouchEvent方法返回值为 onTouchEvent(event);

2.dispatchTouchEvent方法调用了ontouch方法。 ontouch方法在view 中是OntouchListener接口的抽象方法。

3.dispatchTouchEvent 中的ontouch方法要优先于onTouchEvent(event); 执行。onclick在onTouchEvent(event); 中执行只要控件注册了onclicklistener,就会执行onclick方法(在该方法当中)。

4.当dispatchTouchEvent在进行事件分发的时候,只有前一个action返回true,才会触发后一个action,层级传递的。

mOnTouchListener.onTouch(this, event)返回false 之后会调用onTouchEvent(event)方法,但onTouchEvent(event)方法可能会返回true(如何控件是enable的 则会返回为true而使整个方法返回ture如button, 反之亦然如textview)

疑问:哪些控件默认是enable的?哪些不是默认enable的?

5.注册了点击事件,该控件就是enable的了。所以textview注册了点击事件后,即时dispatchtouch方法返回为false, 他的down, move, up也 都会执行。

已知的: imageview不是, button是, textview不是。

public boolean dispatchTouchEvent(MotionEvent event) {
if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
mOnTouchListener.onTouch(this, event)) {
return true;
}
return onTouchEvent(event);
}

条件1: 该view是否注册了点击事件, 注册了点击事件就为1

条件2: 该view是否是可点击的  enable = true;(疑问,注册了点击事件view就是enable的了吗?)

条件3: view的onTouch方法的返回值。

onTouchEvent(event);
该方法如果控件注册了点击事件的话,就会执行click方法。

郭神的传递源码分析:

/article/1562152.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: