Я не могу дать вам точный ответ, не зная, как вы реализовали масштабное представление, но, если у вас есть возможность отследить, увеличен или нет ваш вид, вы можете выборочно отменить сенсорные события, прежде чем они достигнут ViewPager. Это будет выглядеть примерно так:
boolean isZoomedIn;
viewPager.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (isZoomedIn)
{
// The view is zoomed in, so we want to handle this event
// before it gets to the ViewPager so the view can pan
// around freely.
return true;
}
else
{
// The view is zoomed out; let the ViewPager react normally.
return false;
}
}
});
Оттуда вы можете придумать, отслеживая, находится ли увеличенный вид на крайнем левом или правом краю, а затем позволяя событию касания ViewPager завершиться нормально, если движение указателя идет влево или вправо, соответственно. Затем вы можете разрешить пользователю переходить на следующую страницу, не требуя, чтобы он снова уменьшал масштаб. Вы можете узнать все о том, как работает касание, с помощью различных свойств объекта MotionEvent.
Возможно, вы также захотите проверить event.getPointerCount () и вернуть True, если он больше единицы, поэтому ViewPager не будет перемещаться при выполнении масштабирования.
Отслеживать и учитывать все переменные немного сложнее, но это относительно простая математика, и результат сводится к возвращению True для событий, которые ViewPager должен игнорировать, и False для тех, на которые вы хотите, чтобы он реагировал.