ViewPager在ScrollView中无法正常滑动的问题

简介:

来源:

能够兼容ViewPager的ScrollView http://justwyy.iteye.com/blog/1567390

ScrollView中嵌入ViewPager,ViewPager的滑动出现问题  http://bbs.csdn.net/topics/390213480


在网上找到两种方法,都是自定义scrollview,大家可以试试。

方法一:

public class CustomScrollView extends ScrollView {
    private boolean canScroll;

    private GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    public CustomScrollView(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;
        }
    }
}

方法二:

public class CustomScrollView extends ScrollView {
    // 滑动距离及坐标  
    private float xDistance, yDistance, xLast, yLast;  

    public CustomScrollView(Context context, AttributeSet attrs) {  
        super(context, attrs);  
    }  

    @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);  
    }  
}


相关文章
|
XML 数据格式
千变万化的ViewPager指示器-MagicIndicator
千变万化的ViewPager指示器-MagicIndicator
千变万化的ViewPager指示器-MagicIndicator
|
Android开发
RecyclerView + SnapHelper实现炫酷ViewPager效果
目录 什么是SnapHelper SnapHelper是Google 在 Android 24.2.0 的support 包中添加的对RecyclerView的拓展,结合RecyclerView使用,能很方便的做出一些炫酷的效果。
5558 0
|
Android开发 索引 Java
Android NestedScrollView/ScrollView包裹ViewPager自适应高度
Android NestedScrollView/ScrollView包裹ViewPager自适应高度 当Android的NestedScrollView/ScrollView这类滚动View包裹ViewPager时候,V...
3970 0
简单几行代码让ViewPager实现垂直滑动效果
近几日有网友在群里提问:有没有大神做过ViewPager实现垂直滑动效果。其实这个问题实现很简单,下面就简单的讲一下实现步骤: 先来看一张效果图:(你会发现,切换ViewPager慢一些,会看到颜色过渡效果,so beautiful) 垂直ViewPager演示 一、首先写一个类继承ViewPager,在构造方法里面设置viewpage的切换动画,然后重写onInterceptTouchEvent,对事件是否处理进行判断。
1656 0
RecyclerView实现ViewPager效果
RecyclerView实现ViewPager效果,以及横向的ListView效果。效果图如下;   Github: https://github.com/hpu-spring87/recyclerviewpager
705 0
|
Java Android开发 容器
TableLayout和Viewpager实现切换
因为我是在之前的基础上写的,所以这个TableLayout和Viewpager实际上是写在Fragment上的。要写到Activity里其实也是一样的啦。 先看效果图,原谅我不会动态图,只能截个图啦 布局文件 app:tabIndicatorcolor意思是选中的导航条的颜色。 app:tabSelectesTextColor是选中的导航条的文字
2202 0