如何拦截来自ViewPager.OnPageChangeListener触摸事件(How to in

2019-07-19 14:10发布

我试图从标签之间滚动不允许我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日志。 我究竟做错了什么?

Answer 1:

这是我如何处理这个(我的整个班级):

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 ,你不需要覆盖它。



Answer 2:

return true;onInterceptTouchEvent();



Answer 3:

你的构造没有得到BTW叫。 你创建的代码视图寻呼机或XML膨胀呢? 您需要定义适当的构造函数。



文章来源: How to intercept touch events from ViewPager.OnPageChangeListener