4

ImageViews のみを含む ViewPager を表示しています。しかし、循環的に継続的に発生する必要があります。例: ...c > B > A > B > c...

4

3 に答える 3

4

ViePager.OnPageChangeListener を実装するだけです。

YOUR_VIEWPAGER.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageSelected(int position) {
      currentPage = position;
    }
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
      // not needed
    }
    @Override
    public void onPageScrollStateChanged(int state) {
      if (state == ViewPager.SCROLL_STATE_IDLE) {
        int pageCount = pages.size();

        if (currentPage == 0){
          YOUR_VIEWPAGER.setCurrentItem(pageCount-2,false);
        } else if (currentPage == pageCount-1){
          YOUR_VIEWPAGER.setCurrentItem(1,false);
        }
      }
    }
  });
于 2012-11-07T05:43:16.163 に答える
1

これを試してください。C <--> A <--> B <--> C <--> A のような結果が得られます

viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
      var currentPage : Int = 0
      var mPreviousPosition : Int = 0
      var mIsEndOfCycle = false
      override fun onPageScrollStateChanged(state: Int) {
        val pageCount = viewPager?.adapter?.count
        if (state == ViewPager.SCROLL_STATE_IDLE) {
          if (mPreviousPosition == currentPage && !mIsEndOfCycle) {
            if (currentPage == 0) {
              pageCount?.minus(1)?.let { viewPager?.setCurrentItem(it, false) };
            } else {
              viewPager?.setCurrentItem(0, false);
            }
            mIsEndOfCycle = true;
          } else {
            mIsEndOfCycle = false;
          }
          mPreviousPosition = currentPage;
        }
      }

      override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}

      override fun onPageSelected(position: Int) {
        currentPage = position
      }

    })
于 2020-02-12T05:25:17.547 に答える
0

以下は私のためにそれをしました。ユーザーが最初のページから最後のページに「戻る」ようにスクロールしたくありませんでした。つまり、基本的には 3 つの異なる画面がありますが、実際にはアダプターに 4 つの画面があります: A -> B -> C -> A. ユーザーが 2 番目の「A」ページにヒットし、ページャーの状態が IDLE になると、私は最初の「A」ページにシームレスに切り替えます。同様にオーバーライドしたページインジケーターもあります。

val pageChangeCallback = object : ViewPager2.OnPageChangeCallback() {
        override fun onPageScrollStateChanged(state: Int) {
            super.onPageScrollStateChanged(state)

            if (state == ViewPager.SCROLL_STATE_IDLE) {
                if (viewPager.currentItem == NUM_PAGES - 1) {
                    viewPager.setCurrentItem(0, false)
                }
            }
        }
    }
于 2021-01-08T13:59:05.657 に答える