[英]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.