判断是否是上下滚动,并拦截事件

237 阅读1分钟
//移动模式,是否纵向滚动 ,0此次滚动未设置,1是 ,2此次滚动不是纵向滚动
    private int isVertical=0;
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        int action = ev.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                Log.e("---->","donw");
                isVertical = 0;
                downX = (int) ev.getRawX();
                downY = (int) ev.getRawY();
                break;
            case MotionEvent.ACTION_MOVE:
                int moveY = (int) ev.getRawY();
                int moveX = (int) ev.getRawX();
                if(isVertical==0){//未确定则先确定一下
                    if(Math.abs(moveY - downY)>Math.abs(moveX - downX)){//纵向滚动
                        isVertical=1;
                    }else{//非纵向滚动
                        isVertical=-1;
                    }
                }
                if(isVertical==1){//纵向滚动则拦截事件
                    Log.e("---->","move true");
                    return true;
                }else{
                    Log.e("---->","move false");
                    return false;
                }
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP:
                isVertical=0;
                break;
            default:
                break;
        }
        boolean b = super.onInterceptTouchEvent(ev);
        Log.e("---->","return super"+b);
        return b;
    }