Я создаю приложение комиксов/манга, в котором есть активность, содержащая просмотрщик для отображения изображений в каждой главе. Я хочу, чтобы ViewPager запустил новую главу, когда пользователь выходил из пределов на первой/последней странице. Для этого я нашел решение на SO с помощью настраиваемого ViewPager и переопределить onInterceptTouchEvent
Вычислить порог в onInterceptTouchEvent пользовательского ViewPager
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
. Как настроить порог, чтобы запускать соответствующие методы только при выводе за пределы для половины или одной трети размера экрана? Или даже лучше, отключите эти методы, пока изображение будет увеличено? Любая помощь приветствуется.