Is it possible to have a ViewPager inside of a ScrollView?

后端 未结 5 946
失恋的感觉
失恋的感觉 2020-11-29 01:22

I\'m trying to use a ViewPager inside of a ScrollView, but the ViewPager does not appear. If I remove the ScrollView the

5条回答
  •  一整个雨季
    2020-11-29 01:32

    Yes it is possible to have viewpager inside scrollview.

    Use below code and you will achieve your goal, i have done the same in my code as well.

     public class WrapContentHeightViewPager extends ViewPager {
    
        public WrapContentHeightViewPager(Context context) {
            super(context);
        }
    
        public WrapContentHeightViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
            int height = 0;
    
            for (int i = 0; i < getChildCount(); i++) {
                View child = getChildAt(i);
    
                child.measure(widthMeasureSpec, View.MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    
                int h = child.getMeasuredHeight();
    
                if (h > height) height = h;
            }
    
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
    
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
     }
    
     @Override
     public boolean onTouch(View v, MotionEvent event) {
        int dragthreshold = 30;
    
        int downX = 0;
    
        int downY = 0;
    
        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 (distanceY > distanceX && distanceY > dragthreshold) {
                    mViewPager.getParent().requestDisallowInterceptTouchEvent(false);
    
                    mScrollView.getParent().requestDisallowInterceptTouchEvent(true);
                } else if (distanceX > distanceY && distanceX > dragthreshold) {
                    mViewPager.getParent().requestDisallowInterceptTouchEvent(true);
    
                    mScrollView.getParent().requestDisallowInterceptTouchEvent(false);
                }
    
                break;
            case MotionEvent.ACTION_UP:
                mScrollView.getParent().requestDisallowInterceptTouchEvent(false);
    
                mViewPager.getParent().requestDisallowInterceptTouchEvent(false);
    
                break;
        }
    
        return false;
     }
    

    Hope this aids someone in resolving scroll issues with nested ViewPager within a ScrollView.

提交回复
热议问题