Как перехватить события касания из ViewPager.OnPageChangeListener
Я пытаюсь запретить моему 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. Что я делаю не так?
3 ответов
вот как я справляюсь с этим (весь мой класс):
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
, вам не нужно переопределять его.
ваш конструктор не называется btw. Вы создаете пейджер представления по коду или раздуваете его по xml? Вам нужно определить правильные конструкторы.