关于Android中的事件分发机制分两种:
1. View的事件十分机机制:
http://blog.csdn.net/sinyu890807/article/details/9097463
2..ViewGroup的事件分发机制
http://blog.csdn.net/guolin_blog/article/details/9153747
关于我自己理解的一些知识点:
基于ViewGroup和View的事件分发
首先涉及到三个方法:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(TAG, "dispatchTouchEvent: ");
return super.dispatchTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG, "onTouchEvent: ");
return super.onTouchEvent(event);
}
事件分发:
事件的传递首先先到的是Activity,然后交由window处理,window的直接子类phoneWindow调用superDispatchTouchEvent方法,在该方法中将事件传递给DecorView,至此事件就从activity传到我们的View/ViewGroup了.之后进行点击事件的分发和处理.
关于dispatchTouchEvent
// super.dispatchTouchEvent(ev);表示会调用子类的分发机制,不管这里返回true或false,都不会再调用子类的分发机制,
// 它表示是否分发这个消息,不分发,也不会得到处理.
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Log.d(TAG, "dispatchTouchEvent: ");
return super.dispatchTouchEvent(ev);
}
// 在拦截之后,会由本层的onTouchEvent来处理事件,再一级一级往父类传递
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return true;
}
// 这个是ViewGroup中的方法,所以他是属于ViewGroup中事件分发机制的,
ontouchEvent的处理机制
Butotn –> … –> layout –> … –> activity(和dispathTouchEvent的方向相反的)
如果返回为true,表示处理了,就不会继续往下传播..
如果在往下返回ontouchEvent的时候,都是false,Activity层的也是false,最后处理事件的是Activity层的onTouchEvent(因为推到最后一个人身上了, 不处理也得处理,哈哈哈哈哈.)
@Override
public boolean onTouchEvent(MotionEvent event) {
Log.d(TAG, "onTouchEvent: ");
return super.onTouchEvent(event);
}
同时要说明一点,在onTouchEvent中,会调用控件的点击事件,在Motion.UP之前会调用onLongClickListener,之后会调用onClickListener..如果onTouchEvent不是返回super.onTouchEvent(event)
,将不会调用到控件的点击事件.
另附几张图表示事件分发机制:
奉献者:http://blog.csdn.net/xyz_lmn/article/details/12517911
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………
–…………………………………………………………………………………………………………………………………………………