1 つの可能性は、次のように画面を設定することです。
C'ABCA'
C' は C と同じように見えますが、そこまでスクロールすると実際の C に切り替わります。A' は A と同じように見えますが、そこまでスクロールすると実際の A に切り替わります。
onPageScrollStateChangedを次のように実装することでこれを行います。
@Override
public void onPageScrollStateChanged (int state) {
if (state == ViewPager.SCROLL_STATE_IDLE) {
int curr = viewPager.getCurrentItem();
int lastReal = viewPager.getAdapter().getCount() - 2;
if (curr == 0) {
viewPager.setCurrentItem(lastReal, false);
} else if (curr > lastReal) {
viewPager.setCurrentItem(1, false);
}
}
}
これは代替形式のsetCurrentItemを呼び出してパスを渡しfalse
、スムーズなスクロールではなく瞬時にジャンプすることに注意してください。
これには 2 つの主な欠点があります。まず、どちらかの端に到達すると、ユーザーは先に進む前にスクロールを落ち着かせる必要があります。次に、最初と最後のページのすべてのビューの 2 番目のコピーを持つことを意味します。画面のリソースがどの程度重いかによっては、この手法が可能な解決策として除外される場合があります。
また、ビュー ページャーは、スクロールが安定するまで下層のコントロールにクリックを通過させないため、A' および C' フラグメントに対してクリック リスナなどを設定しなくても問題ないことにも注意してください。
編集:これを自分で実装したので、別のかなり大きな欠点があります。A' から A または C' から C に切り替わると、少なくとも現在のテスト デバイスでは、画面がちらつきます。