标签:
android事件分发机制中有下面三个重要方法:
dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
对于接受到的事件先是通过dispatchTouchEvent()方法来处理,不过View和ViewGroup的处理方式稍有不同。
源码较为复杂,我们可以将其简化来看,不过简化方法只是在部分情况下适用:
下面为简化后的ViewGroup中的dispatchTouchEvent()方法:
public boolean dispatchTouchEvent(Motion e) { boolean result = false; if (onInterceptTouchEvent(e)) { result = onTouchEvent(e); } else { result = child.dispatchTouchEvent(e); } return result; }
下面为简化后的View中的dispatchTouchEvent()方法:
public boolean dispatchTouchEvent(MotionEvent event) { if (mOnTouchListener.onTouch(this, event)) { return true; } return onTouchEvent(event); }
从ViewGroup的dispatchTouchEvent方法中,我们不难看出事件是从父布局向子布局传递,层层递进。
首先,ViewGroup得到事件后,由dispatchTouchEvent方法处理,再通过onInterceptTouchEvent方法判断是否拦截,若为true,则由自己的onTouchEvent方法来处理;否则交由子布局的dispatchTouchEvent处理,以此类推。
如果事件一直传递到View控件,在View控件的dispatchTouchEvent中,先交由onTouchListener的onTouch方法处理,若此方法返回true,dispatchTouchEvent方法返回true;否则由onTouchEvent方法来处理。
标签:
原文地址:http://www.cnblogs.com/zhisuoyu/p/5610116.html