2014-04-29 27 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(深度页变压器)。