解决SwipeRefreshLayout和ScrollView中嵌套ViewPager卡顿问题

autoCycleViewPager.setOnTouchListener(this);
int downX;
int downY;
int dragthreshold = 30;

@Override
public boolean onTouch(View v, MotionEvent event) {

    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            downX = (int) event.getRawX();
            downY = (int) event.getRawY();
            break;
        case MotionEvent.ACTION_MOVE:
            int distanceX = Math.abs((int) event.getRawX() - downX);
            int distanceY = Math.abs((int) event.getRawY() - downY);
            if (distanceX > distanceY) {
                refreshLayout.setEnabled(false);
            }
            if (distanceY > distanceX && distanceY > dragthreshold) {
                autoCycleViewPager.getParent().requestDisallowInterceptTouchEvent(false);
                scrollView.getParent().requestDisallowInterceptTouchEvent(true);
                refreshLayout.setEnabled(true);
            } else if (distanceX > distanceY && distanceX > dragthreshold) {
                refreshLayout.setEnabled(false);
                autoCycleViewPager.getParent().requestDisallowInterceptTouchEvent(true);
                scrollView.getParent().requestDisallowInterceptTouchEvent(false);
            }
            break;
        case MotionEvent.ACTION_UP:
            autoCycleViewPager.getParent().requestDisallowInterceptTouchEvent(false);
            scrollView.getParent().requestDisallowInterceptTouchEvent(false);
            refreshLayout.setEnabled(true);
            break;
        case MotionEvent.ACTION_CANCEL:
            refreshLayout.setEnabled(true);
            break;
    }
    return false;
}

只需要在监听ViewPager的OnTouch事件上做如上的处理就可以完美解决问题。








你可能感兴趣的:(解决SwipeRefreshLayout和ScrollView中嵌套ViewPager卡顿问题)