Android滑動沖突解決方案

外部攔截法

重寫父View onInterceptTouchEvent方法就行:

    float latestX;
    float latestY;

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        boolean isIntercept = false;

        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                isIntercept = false;
                break;
            case MotionEvent.ACTION_MOVE:
                float dx = Math.abs(ev.getRawX() - latestX);
                float dy = Math.abs(ev.getRawY() - latestY);
                if (dx > dy) {
                    isIntercept = true;
                } else {
                    isIntercept = false;
                }
                break;
            case MotionEvent.ACTION_UP:
                isIntercept = false;
                break;
        }
        latestX = ev.getRawX();
        latestY = ev.getRawY();
        return isIntercept;
    }

內(nèi)部攔截法

父View重寫onInterceptTouchEvent方法:

   @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        boolean isIntercept = false;
        if (ev.getAction() == MotionEvent.ACTION_DOWN) {
            isIntercept = false;
        } else {
            isIntercept = true;
        }
        return isIntercept;
    }

然后子View重寫dispatchTouchEvent方法:

   float latestX;
    float latestY;

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {

        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                getParent().requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_MOVE:
                float dx = Math.abs(ev.getRawX() - latestX);
                float dy = Math.abs(ev.getRawY() - latestY);
                if (dx > dy) {
                    getParent().requestDisallowInterceptTouchEvent(false);
                }
                break;
            case MotionEvent.ACTION_UP:
                break;
            latestX = ev.getRawX();
            latestY = ev.getRawY();
            return super.dispatchTouchEvent(ev);
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容