View的Touch事件分发机制
首先,事件的分发机制由 dispatchTouchEvent(),onInterceptTouchEvent(),onTouchEvent()三个方法进行处理
用代码表示三者之间的关系( 简单明了)
Public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean consume=false;
if(onInterceptTouchEvent(ev))
consume=onTouchEvent(ev)
else
consume=child.dispatchTouchEvent(ev);
return consume;
}
逻辑过程: 点击事件到达顶级viewgroup,会调用viewgroup的dispatchTouchEvent,之后的处理逻辑如下,如果顶级viewgroup的onInterceptTouchEvent返回true,则事件由viewgroup处理,如果viewgroup的mOnTouchListener被设置,则onTouch会被调用,否则onTouchEvent会被调用,也就是说onTouch会屏蔽掉onTouchEvent。如果顶级viewgroup不拦截事件,事件会传递到子view中,子view对事件的处理逻辑跟viewgroup类似.
Public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean consume=false;
if(onInterceptTouchEvent(ev))
consume=onTouchEvent(ev)
else
consume=child.dispatchTouchEvent(ev);
return consume;
}