写于2020年01月15日
Android事件分发机制伪代码分发流程分析,传递过程Activity --> ViewGroup --> View
//===============================================
//Activity
//===============================================
public boolean Act.dispatchTouchEvent(){
if (PhoneWindow.superDispatchTouchEvent()) {
return true;
}
return Act.onTouchEvent();
}
public boolean Act.onTouchEvent(){
// 无论true or false 都不做处理
return result;
}
public boolean PhoneWindow.superDispatchTouchEvent(){
// Activity ->>> ViewGroup
return ViewGroup.dispatchTouchEvent();
}
//===============================================
//ViewGroup
//===============================================
public boolean ViewGroup.dispatchTouchEvent(){
boolean handled;
// ViewGroup的拦截
if (!ViewGroup.onInterceptTouchEvent()) {
View view = ViewGroup.child;
if (view == null) {
handled = super.dispatchTouchEvent();
}else {
handled = view.dispatchTouchEvent();
}
}
if (mFirstTouchTarget == null) {
handled = super.dispatchTouchEvent();
}else {
handled = view.dispatchTouchEvent();
}
return handled;
}
//===============================================
//View
//===============================================
public boolean View.dispatchTouchEvent(){
boolean result = false;
if (View.OnTouchListener.onTouch()) {
result = true;
}
if (!result && onTouchEvent()) {
result = true;
}
return result;
}
public boolean View.onTouchEvent(){
switch(Action){
case:DOWN:
break;
case:MOVE:
break;
case:UP
View.performClickInternal();
break;
case:CANCLE:
break;
}
return result;
}
public boolean View.performClickInternal(){
return View.performClick();
}
public boolean View.performClick(){
View.onClick();
return result;
}