我通过支持库使用ViewPager和DepthPageTransformer,在升级到最新版本的支持库(18)之前一切都很好。
DepthPageTransformer可以在这里找到:http://developer.android.com/training/animation/screen-slide.html
现在我遇到的问题是,谷歌以某种方式修改了ViewPager,使DepthPageTransformer不再正常工作。
当我向ViewPager添加一个Fragment,并重新创建保存ViewPager的"活动"时,DepthPageTransformer似乎将alpha设置为零,直到我拖动ViewPager,才显示任何内容。拖动后,ViewPager工作正常。
以下代码经过测试,运行良好:首先,我将nineoldandroids库用于较低的8级api。
import android.view.View;
import android.support.v4.view.ViewPager.PageTransformer;
import com.nineoldandroids.view.ViewHelper;
public class DepthPageTransformer implements 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.
ViewHelper.setAlpha(view,0);
} else if (position <= 0) { // [-1,0]
// Use the default slide transition when moving to the left page
ViewHelper.setAlpha(view,1);
ViewHelper.setTranslationX(view,0);
ViewHelper.setScaleX(view,1);
ViewHelper.setScaleY(view,1);
} else if (position <= 1) { // (0,1]
// Fade the page out.
ViewHelper.setAlpha(view,1 - position);
// Counteract the default slide transition
ViewHelper.setTranslationX(view,pageWidth * -position);
// Scale the page down (between MIN_SCALE and 1)
float scaleFactor = MIN_SCALE
+ (1 - MIN_SCALE) * (1 - Math.abs(position));
ViewHelper.setScaleX(view,scaleFactor);
ViewHelper.setScaleY(view,scaleFactor);
} else { // (1,+Infinity]
// This page is way off-screen to the right.
ViewHelper.setAlpha(view,0);
}
}
}
如果你不想使用nineoldandroid,只需编写view.setAlpha(0)
而不是ViewHelper.setAlpha(view,0)
,以此类推,使用scaleX、scaleY和translation。
好吧,我只是完全删除了if子句,看起来效果不错。