简体   繁体   English

如何拦截ViewPager.OnPageChangeListener中的触摸事件

[英]How to intercept touch events from ViewPager.OnPageChangeListener

I'm trying to disallow my ViewPager from scrolling between tabs. 我试图禁止我的ViewPager在标签之间滚动。 I have the following situation: 我有以下情况:

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

        }

I have the logs from onPageScrolled and onPageScrollStateChanged normally, but I do not have logs from onInterceptTouchEvent and onTouch. 我通常从onPageScrolled和onPageScrollStateChanged获取日志,但是我没有来自onInterceptTouchEvent和onTouch的日志。 What am I doing wrong? 我究竟做错了什么?

This is how I handle this (my entire class) : 这就是我处理这个问题的方法(我的全班):

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

}

The boolean paging gives you the option to turn this on and off, if you need it. 如果需要,布尔paging为您提供打开和关闭此选项的选项。 If you don't need, just return false . 如果您不需要,只需return false If you aren't doing anything special in onTouch , you don't need to override it. 如果你没有在onTouch做任何特别的onTouch ,你不需要覆盖它。

return true; in your onInterceptTouchEvent(); 在你的onInterceptTouchEvent();

Your constructor doesn't get called btw. 你的构造函数不会被称为btw。 Are you creating the view pager by code or inflating it by xml? 您是通过代码创建视图寻呼机还是通过xml对其进行充气? You need to define the proper constructors. 您需要定义正确的构造函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用ViewPager.OnPageChangeListener - How to work with ViewPager.OnPageChangeListener ViewPager.OnPageChangeListener中的片段接口 - Interface in fragment in ViewPager.OnPageChangeListener 带有ViewPager.OnPageChangeListener的ActionBarSherlock TabPageIndicator-标签卡住了 - ActionBarSherlock TabPageIndicator with ViewPager.OnPageChangeListener - tab is stuck Android ViewPager.OnPageChangeListener生命周期轮换问题 - Android ViewPager.OnPageChangeListener lifecycle rotation issue ViewPager.OnPageChangeListener给出错误的位置 - ViewPager.OnPageChangeListener giving wrong position ViewPager.OnPageChangeListener在ViewPager完成初始化之前运行 - ViewPager.OnPageChangeListener runs before ViewPager finish init 构造函数Intent(new ViewPager.OnPageChangeListener(){},类 <Player> )未定义 - The constructor Intent(new ViewPager.OnPageChangeListener(){}, Class<Player>) is undefined 以编程方式在ViewPager.OnPageChangeListener onPageSelected()中隐藏软键盘? - Programmatically Hide Soft Keyboard in ViewPager.OnPageChangeListener onPageSelected()? 如何从viewpager的OnPageChangeListener中的位置获取? - How to get the from position in OnPageChangeListener of a viewpager? Kotlin - 如何在 ViewPager 中添加 OnPageChangeListener - Kotlin - How to add OnPageChangeListener in ViewPager
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM