Dynamic height viewpager

后端 未结 6 1345
無奈伤痛
無奈伤痛 2020-11-27 13:06

I\'m trying to create a custom viewpager inside custom scroll viewthat dynamically wraps the current child\'s height.

package com.example.vihaan.dynamicviewp         


        
6条回答
  •  独厮守ぢ
    2020-11-27 13:52

    This few lines of code will solve the problem.

    Create a custome widget for viewpager class. and in xml use it for viewpager.

    public class DynamicHeightViewPager extends ViewPager {
    private View mCurrentView;
    
    public DynamicHeightViewPager(Context context) {
        super(context);
    }
    
    public DynamicHeightViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    
    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
        if (mCurrentView != null) {
            mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
    
            int height = Math.max(0, mCurrentView.getMeasuredHeight());
            heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
    
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }
    }
    
    public void measureCurrentView(View currentView) {
        mCurrentView = currentView;
        requestLayout();
    }
    }
    

    Then in the view pager adapter override the below method and add the code.

      @Override
    public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        super.setPrimaryItem(container, position, object);
        if (container instanceof DynamicHeightViewPager) {
    // instead of card view give your root view from your item.xml file.
            CardView cardView = (CardView) object;
            ((DynamicHeightViewPager) container).measureCurrentView(cardView);
        }
    }
    

    Make your view pager height wrap_content inside xml file so you can check the result.

提交回复
热议问题