Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 用于连续滚动的圆形ViewPager_Android_Android Viewpager - Fatal编程技术网

Android 用于连续滚动的圆形ViewPager

Android 用于连续滚动的圆形ViewPager,android,android-viewpager,Android,Android Viewpager,我正在显示一个仅包含ImageView的ViewPager。但是,我需要它以循环的方式持续发生。例如:…c>B>A>B>c..只需实现ViePager.OnPageChangeListener: YOUR_VIEWPAGER.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { current

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

只需实现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);
        }
      }
    }
  });

试试这个。它将得到像C A B C A一样的结果


下面是为我做的。我不希望用户从第一页滚动到最后一页。所以基本上我有三个不同的屏幕,但实际上适配器中有四个,就像这样:A->B->C->A。当用户点击第二个“A”页面,寻呼机状态变为空闲时,我无缝地切换到第一个“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)
                }
            }
        }
    }

这可以正常工作,但当它从第0项切换到最后一项以及从最后一项切换到第0项时,不会显示滚动效果。您必须更改onPageScrollStateChanged()中的if语句以匹配视图偏移量,例如,您的_VIEWPAGER.setCurrentItem(pageCount-2,false);必须与您的视图匹配;)是的,这很好,但是,我关心在视图之间切换时要显示的动画(第0项和最后一项)。我认为没有解决方法:)第零个位置项在第二次之后丢失
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)
                }
            }
        }
    }