1、不能左右滑动的ViewPager
/* * Date: 14-7-28 * Project: Access-Control-V2 */ package cn.irains.access.v2.common; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.MotionEvent; /** * Author: msdx (645079761@qq.com) * Time: 14-7-28 上午10:20 */ public class StaticViewPager extends ViewPager { public StaticViewPager(Context context) { super(context); } public StaticViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { return false; } @Override public boolean onTouchEvent(MotionEvent ev) { return false; } @Override public void setCurrentItem(int item) { this.setCurrentItem(item, false); } }
2、高度可以为WrapContent的ViewPager
/* * Date: 14-8-18 * Project: Access-Control-V2 */ package cn.irains.access.v2.common; import android.content.Context; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.View; /** * Author: msdx (645079761@qq.com) * Time: 14-8-18 上午11:22 */ public class WrapHeightViewPager extends ViewPager { public WrapHeightViewPager(Context context) { super(context); } public WrapHeightViewPager(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int height = 0; for (int i = 0; i < getChildCount(); i++) { View child = getChildAt(i); child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); int h = child.getMeasuredHeight(); if (h > height) height = h; } heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } /** * Determines the height of this view * * @param measureSpec A measureSpec packed into an int * @param view the base view with already measured height * @return The height of the view, honoring constraints from measureSpec */ private int measureHeight(int measureSpec, View view) { int result = 0; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.EXACTLY) { result = specSize; } else { // set the height from the base view if available if (view != null) { result = view.getMeasuredHeight(); } if (specMode == MeasureSpec.AT_MOST) { result = Math.min(result, specSize); } } return result; } }