android 仿花椒直播上下切换房间,在最上层加了一个纵向滑动的viewpager

下层还有一个横向滑动隐藏直播间信息的view,导致下层事件无法响应,怎么处理事件分发

参考:http://blog.csdn.net/duolaimila/article/details/72189790

刚刚看了花椒直播,发现如果既想要左右滑动显示直播间信息,又要上下滑动切换房间,有两种方法,1.就是上面那种 2.对于不想改动太多的就采用花椒直播的方式,在房间布局最上层加上一个verticalViewpager
,重写Viewpager的dispatchTouchEvent方法,在其中判断左右滑动动作,来显示/隐藏房间布局。记住,把房间布局放在verticalViewpager。

我之前也遇到了类似的问题,解决思路就是滑动拦截,你的控件复写onInterceptTouchEvent(),如下:

    private float x1 = 0;
    private float x2 = 0;
    private float y1 = 0;
    private float y2 = 0;

        @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        final float x = ev.getX();
        final float y = ev.getY();
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                x1 = ev.getX();
                y1 = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                int xDiff = (int) Math.abs(x - mLastMotionX);
                int yDiff = (int) Math.abs(y - mLastMotionY);
                final int x_yDiff = xDiff * xDiff + yDiff * yDiff;
                boolean xMoved = x_yDiff > mTouchSlop * mTouchSlop;
                LogUtil.myLog("xMoved:" + xMoved);
                if (xMoved) {
                    LogUtil.myLog("xM:" + (xDiff > yDiff * 4));
//                            return xDiff > yDiff * 4;
                }
                break;
            case MotionEvent.ACTION_UP:
                LogUtil.myLog("ACTION_UP:");
                //当手指离开的时候
                x2 = ev.getX();
                y2 = ev.getY();
                if (y1 - y2 > 50) {
                    TU.init().CustomShort("向上滑");
                } else if (y2 - y1 > 50) {
                    TU.init().CustomShort("向下滑");
                } else if (x1 - x2 > 50) {
                    TU.init().CustomShort("向左滑");
                } else if (x2 - x1 > 50) {
                    TU.init().CustomShort("向右滑");
                }
                break;
        }
        return super.onInterceptTouchEvent(ev);
    }

在手指抬起的时候,也就是MotionEvent.ACTION_UP:你判断滑动方向,把不是这个方向上的滑动直接拦截掉,直接return ture