ViewPager自适应

自定义ViewPager ,根据viewpager滑动得到position的位置 去变化每个itemview高度

public class MyViewPager extends ViewPager {
    private int position;

    public MyViewPager(Context context) {
        super(context);
    }

    public MyViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int height = 0;
        View child = getChildAt(position);
        if (child == null) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            return;
        }
        child.measure(widthMeasureSpec,
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        int h = child.getMeasuredHeight();
        if (h > height) //采用最大的view的高度。
            height = h;
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(height,
                MeasureSpec.EXACTLY);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }

    public void measurePositionFragment(int postion) {
        this.position = postion;
        requestLayout();
    }
}

在Viewpager 调用setAdapter以后 还要调用一下这个方法,

mViewpager.post(new Runnable() {
                        @Override
                        public void run() {
                            mViewpager.requestLayout();
                        }
                    });

设置ViewPager的回调方法,每次切换 及调用measurePositionFragment()方法,去重新测量

mViewpager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                        @Override
                        public void onPageScrolled(int i, float v, int i1) {
                            
                        }

                        @Override
                        public void onPageSelected(int i) {
                            mViewpager.measurePositionFragment(i);
                        }

                        @Override
                        public void onPageScrollStateChanged(int i) {

                        }
                    });

你可能感兴趣的:(ViewPager自适应)