2014-04-29 108 views
0

我試圖改變我的ViewPager過渡動畫。 當您從一張照片切換到另一張照片時,我想要使用與默認圖庫相同的行爲。它基本上是一個動畫,其中當前頁面向左移動,而下一個頁面從後面移動並且變大。ViewPager動畫像畫廊應用程序

我見過我可以用PageTransformer改變動畫。

pager.setPageTransformer(false, new PageTransformer() { 

     @Override 
     public void transformPage(View page, float position) { 
      if (position < 0) { 

      } else { 
       final float normalizedposition = Math.abs(Math.abs(position) - 1); 
       page.setScaleX(normalizedposition/2 + 0.5f); 
       page.setScaleY(normalizedposition/2 + 0.5f); 
      } 
     } 
    }); 

因此,我將當前頁面向左滑動,沒關係。 新頁面從小尺寸開始增長,這也可以。但是,頁面來自中心的權利。我想刪除翻譯,並將它放在中間,但是很小,隱藏在當前頁面中。

如果我添加page.setTranslationX(1080 * (-(position)));,則接下來的頁面停留在屏幕的中間,但它們始終在當前頁面上方可見。如果我也爲頁面添加alpha,則出現的頁面不會隱藏在舊頁面後面。

我試圖檢查畫廊應用程序的源代碼,但我沒有找到任何提及transformPage函數。

回答

0

原來很簡單。它在android developper網站的演示中。

public class DepthPageTransformer implements ViewPager.PageTransformer { 
private static final float MIN_SCALE = 0.75f; 

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

    if (position < -1) { // [-Infinity,-1) 
     // This page is way off-screen to the left. 
     view.setAlpha(0); 

    } else if (position <= 0) { // [-1,0] 
     // Use the default slide transition when moving to the left page 
     view.setAlpha(1); 
     view.setTranslationX(0); 
     view.setScaleX(1); 
     view.setScaleY(1); 

    } else if (position <= 1) { // (0,1] 
     // Fade the page out. 
     view.setAlpha(1 - position); 

     // Counteract the default slide transition 
     view.setTranslationX(pageWidth * -position); 

     // Scale the page down (between MIN_SCALE and 1) 
     float scaleFactor = MIN_SCALE 
       + (1 - MIN_SCALE) * (1 - Math.abs(position)); 
     view.setScaleX(scaleFactor); 
     view.setScaleY(scaleFactor); 

    } else { // (1,+Infinity] 
     // This page is way off-screen to the right. 
     view.setAlpha(0); 
    } 
} 
} 

請參閱here(深度頁變壓器)。