解决办法:
第一步:给viewpager设置制定高度,比如120dp
第二步:给ScrollView的xml布局中添加 android:fillViewport="true" 属性
(以上两步已经能解决viewpager不显示的问题了,如果想继续解决滑动冲突的问题,继续往下看)
第三步:重写ScrollView的触摸拦截事件,完整代码如下
package cn.showmac.sdk.views; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ScrollView; /** * 描述:自定义的ScrollView,用于解决嵌套viewpager冲突的问题 * 创建人:菜籽 * 创建时间:2017/9/15 下午2:57 * 备注: */ public class VerticalScrollView extends ScrollView { private float xDistance, yDistance, xLast, yLast; public VerticalScrollView(Context context) { super(context); } public VerticalScrollView(Context context, AttributeSet attrs) { super(context, attrs); } public VerticalScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: xDistance = yDistance = 0f; xLast = ev.getX(); yLast = ev.getY(); break; case MotionEvent.ACTION_MOVE: final float curX = ev.getX(); final float curY = ev.getY(); xDistance += Math.abs(curX - xLast); yDistance += Math.abs(curY - yLast); xLast = curX; yLast = curY; if (xDistance > yDistance) { return false; } } return super.onInterceptTouchEvent(ev); } }
(以上三步已经可以解决viewpager不显示以及ScrollView的滑动冲突问题,如果你的viewpager中每一个item的高度不一致,继续往下看)
第四步:动态设置viewpager的高度
//为ViewPager设置高度 (代码中的height参数是测量的内部控件的高度值)
ViewGroup.LayoutParams params = mViewpager.getLayoutParams();
params.height = height;
mViewpager.setLayoutParams(params);