首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >用于连续滚动的圆形ViewPager

用于连续滚动的圆形ViewPager
EN

Stack Overflow用户
提问于 2012-11-07 05:22:35
回答 3查看 7.6K关注 0票数 4

我正在显示一个仅包含ImageViews的ViewPager。但是,我需要它以循环的方式持续发生。对于Ex:...c >B>A>B> c...

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-07 05:43:16

只需实现ViePager.OnPageChangeListener:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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);
        }
      }
    }
  });
票数 4
EN

Stack Overflow用户

发布于 2020-02-12 05:25:18

试试这个吧。它将得到类似C <--> A <--> B <--> C <--> A的结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
      }

    })
票数 1
EN

Stack Overflow用户

发布于 2021-01-08 13:59:06

下面的代码为我做到了这一点。我不想让用户从第一页滚动到最后一页。基本上我有三个不同的屏幕,但实际上在适配器中有四个,就像这样: A -> B -> C -> A。当用户点击第二个'A‘页面时,寻呼机状态变为空闲,我无缝地切换到第一个'A’页面。我甚至有一个页面指示器,我已经类似地覆盖了它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)
                }
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13263549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文