View 滑动冲突处理方法

来源:互联网 发布:淘宝上的12号塑料弹壳 编辑:程序博客网 时间:2024/05/17 23:01

外部拦截发

在父布局中做处理:

    private int mLastXIntercept;    private int mLastYIntercept;    @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        boolean intercepted = false;        int x = (int) ev.getX();        int y = (int) ev.getY();        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                intercepted = false;                break;            case MotionEvent.ACTION_MOVE:                if (interceptEvent(ev)) {                    intercepted = true;                } else {                    intercepted = false;                }                break;            case MotionEvent.ACTION_UP:                intercepted = false;                break;            default:                break;        }         mLastXIntercept = x;         mLastYIntercept = y;        return intercepted;    }    /* 父容器需要当前的点击事件 */    private boolean interceptEvent(MotionEvent ev) {        return true;    }

内部拦截发

子View中做如下处理:

 private int mLastX;    private int mLastY;    @Override    public boolean dispatchTouchEvent(MotionEvent ev) {        int x = (int) ev.getX();        int y = (int) ev.getY();        switch (ev.getAction()) {            case MotionEvent.ACTION_DOWN:                getParent().requestDisallowInterceptTouchEvent(true);                break;            case MotionEvent.ACTION_MOVE:                int deltaX = x - mLastX;                int deltaY = y - mLastY;                if (dispatchEvent(ev)) {                    getParent().requestDisallowInterceptTouchEvent(false);                }                break;            case MotionEvent.ACTION_UP:                break;            default:                break;        }        mLastX = x;        mLastY = y;        return super.dispatchTouchEvent(ev);    }     /* 父容器需要当前的点击事件 */    private boolean dispatchEvent(MotionEvent event) {        return true;    }

父容器中做如下处理:

  @Override    public boolean onInterceptTouchEvent(MotionEvent ev) {        int action = ev.getAction();        if (action == MotionEvent.ACTION_DOWN) {            return false;        } else {            return true;        }     }
0 0
原创粉丝点击