美文网首页
滑动冲突的处理

滑动冲突的处理

作者: _Once1 | 来源:发表于2019-04-14 11:58 被阅读0次

    简单来说,处理滑动冲突,主要还是对view的事件分发的拦截的处理,原则就是 哪个view需要响应对应的滑动事件,就让其去拦截点击事件。

    有下面两种方法:

    • 外部拦截法(推荐):在父容器中处理点击事件onInterceptTouchEvent()
    • 内部拦截法:父容器不处理任何事件,决定权都交给子元素

    外部拦截法

    可以用如下伪代码处理:

    public boolean onInterceptTouchEvent(MotionEvent event) {
        boolean intercepted = false;
        int x = event.getX();
        int y = event.getY();
        
        switch(event.getActioin()) {
            case MotionEvent.ACTION_DOWN:
                // 必须为false,否则后续事件无法传递给子元素
                intercepted = false;
                break;
            case MotionEvent.ACTION_MOVE:
                if(父容器需要处理点击事件) {
                    intercepted = true;
                } else {
                    intercepted = false;
                }
                break;
            case MotionEvent.ACTION_UP:
                intercepted = false;
                break;
            default:
                break;
        }
        
        mLastX = x;
        mLastY = y;
        return intercepted;
    }
    

    这种方法使用起来比较简单,推荐使用。


    内部拦截法

    下面再看一下由子元素拦截法的方法:

    public boolean onInterceptTouchEvent(MotionEvent event) {
        int x = event.getX();
        int y = event.getY();
        
        switch(event.getActioin()) {
            case MotionEvent.ACTION_DOWN:
                // 必须,否则后续事件无法传递给子元素
                parent.requestDisallowInterceptTouchEvent(true);
                break;
            case MotionEvent.ACTION_MOVE:
                int deltaX = x - mLastX;
                int deltaY = y - mLastY;
            
                if(父容器需要处理点击事件) {
                    parent.requestDisallowInterceptTouchEvent(false);
                } 
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                break;
        }
        
        mLastX = x;
        mLastY = y;
        return super.dispatchInterceptTouchEvent(event);
    }
    

    这种方法用起来比较麻烦。

    相关文章

      网友评论

          本文标题:滑动冲突的处理

          本文链接:https://www.haomeiwen.com/subject/hnmjwqtx.html