android – 如何在ViewPager中禁用Horizo​​ntalScrollView的滚动

我在ViewPager中放置了一个水平滚动视图.目标是仅使用软件触发的水平滚动视图滚动.所有滚动手势都应由视图寻呼机处理.

我已经通过创建一个拦截所有滑动手势的自定义view Pager来完成它:

public class GreedyViewPager extends ViewPager {

    GestureDetector mGestureDetector;
    View.OnTouchListener mGestureListener;

    public GreedyViewPager(Context context) {
        super(context);
        initGestureDetector(context);
    }

    public GreedyViewPager(Context context,AttributeSet attributeSet) {
        super(context,attributeSet);
        initGestureDetector(context);
    }

    void initGestureDetector(Context context){
        mGestureDetector = new GestureDetector(context,new ScrollDetector());
        ViewConfiguration vc = ViewConfiguration.get(context);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        return super.onInterceptTouchEvent(ev) || mGestureDetector.onTouchEvent(ev);
    }

    class ScrollDetector extends SimpleOnGestureListener {
        @Override
        public boolean onScroll(MotionEvent e1,MotionEvent e2,float distanceX,float distanceY) {
            return true;
        }

        @Override
        public boolean onDoubleTap(MotionEvent e) {
            return true;
        }
    }
}

不幸的是,它并不能很好地适用于所有设备,有时候我必须刷一双双门轿跑车才能进入ViewPager的下一个位置.

知道如何让它变得更好吗?

解决方法

为了解决这个问题,我遵循了以下步骤:

首先,我创建了一个自定义Horizo​​ntalScrollView类:

public class MyScrollView extends horizontalscrollview{

    public MyScrollView(Context context) {
        super(context);

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

    }

    public MyScrollView(Context context,AttributeSet attrs,int defStyle) {
        super(context,attrs,defStyle);

    }

    @Override
    protected void onOverScrolled(int scrollX,int scrollY,boolean clampedX,boolean clampedY) {    

        Log.e(" horizontal "," - "+scrollX);
            // here i call the listener i have created
        scrollViewListener.onHorizontalScrollChanged(scrollX,scrollY);

        super.onOverScrolled(0,scrollY,true,true);       
    }

    // i create a scroll view listener,and i instantiate this from main Activity
    private ScrollViewListener scrollViewListener = null;   
    public interface ScrollViewListener {
        void onHorizontalScrollChanged(int x,int y);
    }

    public void setScrollViewListener(ScrollViewListener scrollViewListener) {
        this.scrollViewListener = scrollViewListener;
    }

    @Override
    protected void onScrollChanged(int l,int t,int oldl,int oldt) {
        super.onScrollChanged(l,t,oldl,oldt);    
    }

}

在您的MainActivity中实现此:

implements MyScrollView.ScrollViewListener

@Override
public void onHorizontalScrollChanged(int x,int y) {
      // In your ViewPager call this method
      mPager.scrollBy(x,y);
}

同样在onCreate的MainActivity中,您必须添加以下内容

// i have also added this custom horizontalscrollview to my XML
MyScrollView myScrollView = (MyScrollView) findViewById(R.id.h_scroll);
myScrollView.setScrollViewListener(this);

我实现了这个代码,它对我有用,我希望它甚至可以为你工作:)

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...