需要在自定义viewpager里面实现dispatchTouchEvent方法

  private float x1;

    /**
     * 解决滑动表情冲突.
     * @param ev
     * @return
     */
    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //告知父控件 把事件下发给子控件处理
                getParent().requestDisallowInterceptTouchEvent(true);
                x1 = ev.getX();
                break;
            case MotionEvent.ACTION_MOVE:
                //拿到当前显示页下标
                int curPosition = getCurrentItem();
                //手指移动时的X坐标
                float x2 = ev.getX();
                if (curPosition == 0) {
                    if ((x2 - x1) > 50) {
                    //当当前页面在下标为0的时候,由父亲拦截触摸事件
                        getParent().requestDisallowInterceptTouchEvent(false);
                    } else {
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                } else if (curPosition == (getAdapter().getCount() - 1)) { //当前页面为最后一页时
                    if ((x1 - x2) > 50) {
                        getParent().requestDisallowInterceptTouchEvent(false);
                    } else {
                        getParent().requestDisallowInterceptTouchEvent(true);
                    }
                } else {
                //其他情况,由孩子拦截触摸事件
                    getParent().requestDisallowInterceptTouchEvent(true);
                }
                break;
        }
        return super.dispatchTouchEvent(ev);
    }

这样就可以了。

posted on 2020-07-09 10:24  南巷挽清风  阅读(316)  评论(0编辑  收藏  举报