ViewPager and DepthPageTransformer



我通过支持库使用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子句,看起来效果不错。

相关内容

  • 没有找到相关文章

最新更新