6

我试图禁止我的 ViewPager 在选项卡之间滚动。我有以下情况:

        public class MyClass extends ViewPager implements ViewPager.OnPageChangeListener, OnTouchListener {

             public MyClass() {
               setOnTouchListener(this);
             }

@Override
    public void onPageScrollStateChanged(int state) {
        Log.d("Testing", TAG + " onPageScrollStateChanged");
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        Log.d("Testing", TAG + " onPageScrolled");
    }

    @Override
    public void onPageSelected(int position) {
        Log.d("Testing", TAG + " onPageSelected");
    }

        @Override
        public boolean onInterceptTouchEvent(MotionEvent event) {
            Log.d("Testing", "intercept");
                return false;
        }

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Log.d("Testing", "touch2");
                    return false;
            }

        }

我通常有来自 onPageScrolled 和 onPageScrollStateChanged 的​​日志,但我没有来自 onInterceptTouchEvent 和 onTouch 的日志。我究竟做错了什么?

4

3 回答 3

12

这就是我处理这个(我的整个班级)的方式:

public class SelectiveViewPager extends ViewPager {
private boolean paging = true;

public SelectiveViewPager(Context context) {
    super(context);
}

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

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
    if (paging) {
        return super.onInterceptTouchEvent(e);
    }

    return false;
}

public void setPaging(boolean p){ paging = p; }

}

如果需要,布尔值paging使您可以选择打开和关闭它。如果您不需要,只需return false. 如果您没有在 中做任何特别的事情onTouch,则不需要覆盖它。

于 2013-02-08T03:02:54.260 回答
2

return true;在你的onInterceptTouchEvent();

于 2013-02-08T03:27:08.243 回答
0

顺便说一句,您的构造函数不会被调用。您是通过代码创建视图寻呼机还是通过 xml 膨胀它?您需要定义正确的构造函数。

于 2013-02-08T02:11:57.763 回答