ズーム ビューをどのように実装したかを知らずに正確な答えを出すことはできませんが、ビューがズームインされているかどうかを追跡できると仮定すると、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() をチェックして、1 より大きい場合は True を返し、ズームの実行中に ViewPager が動き回らないようにすることもできます。
すべての変数を追跡して説明するのは少し複雑になりますが、それは比較的単純な数学であり、その結果は、ViewPager に無視させたいイベントに対して True を返し、反応させたいイベントに対して False を返すことになります。