首先这个不是我自己写得,在网上找了很多唯一一个有效果得
代码
import android.content.Context;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
public class CustomViewpager extends ViewPager {
private int current;
private int height = 0;
private boolean scrollble = true;
public CustomViewpager(@NonNull Context context) {
super(context);
}
public CustomViewpager(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (getChildCount() > current) {
View child = getChildAt(current);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
public void resetHeight(int current) {
this.current = current;
if (getChildCount() > current) {
LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) getLayoutParams();
if (layoutParams == null) {
layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, height);
} else {
layoutParams.height = height;
}
setLayoutParams(layoutParams);
}
}
@Override
public boolean onTouchEvent(MotionEvent ev){
if (!scrollble){
return true;
}
return super.onTouchEvent(ev); }
public boolean isScrollble(){
return scrollble;
}
public void setScrollble(boolean scrollble){
this.scrollble=scrollble;
}
}
这个自定义viewpager得意思就是让viewpager实现根据内容得大小改变面积
activity里面得代码
vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int position) {
vp.resetHeight(position);
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
效果实现