Synchronizing two ViewPagers using OnPageChangeListener

后端 未结 6 2032
北海茫月
北海茫月 2020-12-08 22:57

I\'m trying to synchronize two ViewPagers, as apparently have quite a lot of people before me, and I\'ve got as far as this:

private ViewPager m         


        
6条回答
  •  悲哀的现实
    2020-12-08 23:37

    I solved this problem in a much easier (and cleaner) way using the OnPageChangeListener:

    mViewPager1.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
          private int mScrollState = ViewPager.SCROLL_STATE_IDLE;
    
          @Override
          public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) {
            if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
              return;
            }
            mViewPager2.scrollTo(mViewPager1.getScrollX(), mViewPager2.getScrollY());
          }
    
          @Override
          public void onPageSelected(final int position) {
    
          }
    
          @Override
          public void onPageScrollStateChanged(final int state) {
            mScrollState = state;
            if (state == ViewPager.SCROLL_STATE_IDLE) {
              mViewPager2.setCurrentItem(mViewPager1.getCurrentItem(), false);
            }
          }
    });
    
    mViewPager2.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
          private int mScrollState = ViewPager.SCROLL_STATE_IDLE;
    
          @Override
          public void onPageScrolled(final int position, final float positionOffset, final int positionOffsetPixels) {
            if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
              return;
            }
            mViewPager1.scrollTo(mViewPager2.getScrollX(), mViewPager1.getScrollY());
          }
    
          @Override
          public void onPageSelected(final int position) {
    
          }
    
          @Override
          public void onPageScrollStateChanged(final int state) {
            mScrollState = state;
            if (state == ViewPager.SCROLL_STATE_IDLE) {
              mViewPager1.setCurrentItem(mViewPager2.getCurrentItem(), false);
            }
          }
    });
    

提交回复
热议问题