自定义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) {
}
});
网友评论