基要稳

[基要稳] Android事件分发机制伪代码流程分析

2021-09-30  本文已影响0人  Guxxxd

写于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;
}
上一篇 下一篇

猜你喜欢

热点阅读