如何拦截来自 ViewPager.OnPageChangeListener 的触摸事件 [英] How to intercept touch events from 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; }
}
布尔值 paging
让您可以根据需要选择打开和关闭此功能.如果您不需要,只需 return 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屋!