这个问题我也遇到了,没找到好的办法,最后我把ScrollView删了,如果一定要保留的话建议用GroupView实现

解决方案 »

  1.   

    已经自己实现了,需要重写ScrollView,下面是代码
    package com.zp365.view;import android.content.Context;
    import android.util.AttributeSet;
    import android.view.GestureDetector;
    import android.view.GestureDetector.SimpleOnGestureListener;
    import android.view.MotionEvent;
    import android.view.View;
    import android.widget.ScrollView;/**
     * 解决ScrollView嵌套ViewPager出现的滑动冲突问题
     */
    public class ScrollView1 extends ScrollView {
    private boolean canScroll; private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener; public ScrollView1(Context context, AttributeSet attrs) {
    super(context, attrs);
    mGestureDetector = new GestureDetector(new YScrollDetector());
    canScroll = true;
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
    if(ev.getAction() == MotionEvent.ACTION_UP)
    canScroll = true;
    return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
    } class YScrollDetector extends SimpleOnGestureListener {
    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    if(canScroll)
    if (Math.abs(distanceY) >= Math.abs(distanceX))
    canScroll = true;
    else
    canScroll = false;
    return canScroll;
    }
    }
    }
    用这个自定义的ScrollView代替原来的ScrollView就行
      

  2.   

    大神请问怎么调用自定义的scroll呢?之前不是直接在xml定义,现在需要怎么调用呢?
      

  3.   

    如是tgyhrfuj741 所说,虽然能实现,但是 scrollview的左右滑动就不有用了,我现在的问题是主视图里有一个横向滑动的scrollview 子视图中有一个上下滑动的scrollview ,在子视图中嵌入viewpager,但是viewpager的左右滑动事件与最外面的scrollview的左右滑动事件 有冲突,请问怎么解决
      

  4.   

    在scrollview中放一个viewpager,然后在viewpager里面放listview,展示不出数据是怎么回事啊,求大神指教。
      

  5.   

    为什么要private boolean canScroll;这个东西啊?这段代码存在问题:
    我发现,如果ScrollView1里面包含多个LinearLayout的,例如A, B, C,
    如果第一次在A上面划,下一次在LayoutB上面划,在B上面是划不动的,第二次在B上面才能划动。
    后来我删除canScroll相关的代码,就都没有问题了。
      

  6.   

    不错,用2楼的方法解决了问题!顶一个,我的是在ScrollView里面嵌入ViewPager,当ViewPager左右滑动的时候,如果滑偏ScrollView会上下滑动。用了2楼的方法之后,ViewPager左右滑动的时候滑动方向发生了倾斜,ScrollView的滚动事件不会触发。大神,顶顶顶顶顶顶顶顶顶顶顶!!!!!!!
      

  7.   

    大神怎么调用scrollview1啊,我调用报错:自定义scrollview1不能强制转换为Scrollview
      

  8.   

    各位大哥,能发一个demo吗? 我试过了自定义ScrollView还是不行。
      

  9.   

    多谢楼主!我在一个 ScrollView 里嵌入了一个 ViewPager,使用楼主的方法重写了 ViewPager,让它只能横向滚动不能纵向滚动。
      

  10.   

    多谢,重写了scrollview和viewpager就好了
      

  11.   

    楼主重写的scrollview是有问题的,会经常出现scrollview无法滑动的问题,完全不能用,下面提供一个可以网上查找可以正常使用的自定义scrollview代码:
    public class CustomScrollView extends ScrollView { private float xDistance, yDistance, xLast, yLast; public CustomScrollView(Context context) {
    super(context);
    } public CustomScrollView(Context context, AttributeSet attrs) {
    super(context, attrs);
    } public CustomScrollView(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);
    }
    }
      

  12.   

    膜拜大神Orz...帮助我我解决了困扰多年的便秘