如何拦截来自ViewPager.OnPageChangeListener触摸事件 [英] How to intercept touch events from ViewPager.OnPageChangeListener

查看:241
本文介绍了如何拦截来自ViewPager.OnPageChangeListener触摸事件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从标签之间滚动不允许我ViewPager。我有以下情况:

I'm trying to disallow my ViewPager from scrolling between tabs. 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;
            }

        }

我从onPageScrolled日志和正常onPageScrollStateChanged,但我没有从onInterceptTouchEvent和onTouch日志。我究竟做错了什么?

I have the logs from onPageScrolled and onPageScrollStateChanged normally, but I do not have logs from onInterceptTouchEvent and 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; }

}

布尔页面给你把这个和关闭,如果你需要它的选项。如果你不需要,只是返回false 。如果你没有做什么特别的 onTouch ,你不需要覆盖它。

The boolean paging gives you the option to turn this on and off, if you need it. If you don't need, just return false. If you aren't doing anything special in onTouch, you don't need to override it.

这篇关于如何拦截来自ViewPager.OnPageChangeListener触摸事件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆