Как перехватить события касания из 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, вам не нужно переопределять его.


return true; в своем onInterceptTouchEvent();


ваш конструктор не называется btw. Вы создаете пейджер представления по коду или раздуваете его по xml? Вам нужно определить правильные конструкторы.