Я создаю приложение для комиксов/манги, в котором есть действие, содержащее viewpager для отображения изображений в каждой главе. Я хочу, чтобы ViewPager начинал новую главу, когда пользователь выходил за пределы первой/последней страницы. Для этого я нашел решение на SO, используя собственный ViewPager и переопределив onInterceptTouchEvent
public class CustomViewPager extends ViewPager {
float mStartDragX;
OnSwipeOutListener mListener;
public CustomViewPager(Context context) {
super(context);
}
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setOnSwipeOutListener(OnSwipeOutListener listener) {
mListener = listener;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
float x = ev.getX();
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mStartDragX = x;
break;
case MotionEvent.ACTION_MOVE:
if (mStartDragX < x && getCurrentItem() == 0) {
mListener.onSwipeOutAtStart();
} else if (mStartDragX > x && getCurrentItem() == getAdapter().getCount() - 1) {
mListener.onSwipeOutAtEnd();
}
break;
}
return super.onInterceptTouchEvent(ev);
}
public interface OnSwipeOutListener {
void onSwipeOutAtStart();
void onSwipeOutAtEnd();
}
}
Этот подход работает до определенной степени. Дело в том, что мой ViewPager использует TouchImageView
, который позволяет масштабировать изображение, и если я использую эту функцию на первой/последней странице, то любое движение перетаскивания (наименьшее событие) вызовет onSwipeOutAtStart
и onSwipeOutAtEnd
. Как я могу настроить порог для запуска соответствующих методов только при пролистывании за пределы половины или одной трети размера экрана? Или, что еще лучше, отключить эти методы при увеличении изображения? Любая помощь приветствуется.