2016-02-27 20 views
2

我更新了Google支持庫以進行修改。 23.2.0。並ViewPager成爲顯示錯誤的頁面瀏覽量。
ViewPager使用自定義頁面變壓器:更新支持庫後,ViewPager變得顯示不正確的頁面

private class ZoomOutPageTransformer implements ViewPager.PageTransformer { 

    private static final float MIN_SCALE = 0.85f; 

    private float mCenterOffset; 
    private boolean mIsFixedCenterOffset = false; 

    public void transformPage(View view, float position) { 
     final int pageWidth = view.getWidth(); 
     final int pageHeight = view.getHeight(); 

     if(!mIsFixedCenterOffset) { 
      mCenterOffset = position; 
      mIsFixedCenterOffset = true; 
     } 

     position -= mCenterOffset; 

     if (position <= 1) { 
      final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
      final float vertMargin = pageHeight * (1 - scaleFactor)/2; 
      final float horzMargin = pageWidth * (1 - scaleFactor)/2; 

      if (position < 0) { 
       view.setTranslationX(horzMargin - vertMargin/2); 
      } else { 
       view.setTranslationX(-horzMargin + vertMargin/2); 
      } 

      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 
     } 
    } 
} 

而且具有頁邊距:

ViewPager viewPager = (ViewPager) v.findViewById(R.id.vpDaySlider); 
mAdapter = new DayPagerAdapter(getActivity(), fm, mWeekNumber); 
viewPager.setAdapter(mAdapter); 
viewPager.addOnPageChangeListener(this); 
viewPager.setPageTransformer(false, new ZoomOutPageTransformer()); 
Point display = SettingsManager.getDisplaySize(getContext()); 
final int padding = (int)(display.x * 0.1); 
viewPager.setPageMargin(padding); 

現在,它看起來像如下:
enter image description here
我甚至不知道在哪裏的錯誤是。 ..如何解決它?我需要頁面填充父空間並僅在滾動時縮小。
警告在logcat中:

W/FragmentManager:moveToState:用於DayFragment {24ec179#2的ID = 0x7f0c00b4}不更新直列片段狀態;預期狀態3中2

ADDED 我意識到了什麼錯誤。 ZoomOutPageTransformer修復了頁面的第一個位置。它必須是0或接近於零,但在更新位置> 1的第一個值(例如我手機上的1.1)後,下一個(秒)值是實際頁面位置(對於我的手機:0)。
因爲發生了什麼?我認爲這是一個錯誤的行爲ViewPager

+0

標記你的問題解決! –

+0

這是我的解決方案http://stackoverflow.com/a/37000323/1983018 – cuasodayleo

回答

2

我修正了這個bug,因此:

private static class ZoomOutPageTransformer implements ViewPager.PageTransformer { 

     private static final float MIN_SCALE = 0.85f; 

     private ViewPager mViewPager; 
     private float mPositionFixer; 
     private boolean isSetFixer = false; 

     public ZoomOutPageTransformer(ViewPager viewPager) { 
      mViewPager = viewPager; 
     } 

     public void transformPage(View view, float position) { 
      final int pageWidth = view.getWidth(); 
      final int pageHeight = view.getHeight(); 

      if(!isSetFixer) { 
       final int mClientWidth = mViewPager.getMeasuredWidth() - 
         mViewPager.getPaddingLeft() - mViewPager.getPaddingRight(); 
       mPositionFixer = ((float)mViewPager.getPaddingStart())/mClientWidth; 
       isSetFixer = true; 
      } 

      position -= mPositionFixer; 

      if (position <= 1) { 
       final float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
       final float vertMargin = pageHeight * (1 - scaleFactor)/2; 
       final float horzMargin = pageWidth * (1 - scaleFactor)/2; 

       if (position < 0) { 
        view.setTranslationX(horzMargin - vertMargin/2); 
       } else { 
        view.setTranslationX(-horzMargin + vertMargin/2); 
       } 

       view.setScaleX(scaleFactor); 
       view.setScaleY(scaleFactor); 
      } 
     } 
    } 

雖然支持庫修訂版我無法理解這樣的錯誤。 23.2.0。