0

我正在通过支持库将 ViewPager 与 DepthPageTransformer 一起使用,并且在升级到最新版本的支持库 (18) 之前一切正常。

DepthPageTransformer 可以在这里找到:http: //developer.android.com/training/animation/screen-slide.html

现在我遇到的问题是 Google 以某种方式修改了 ViewPager,因此 DepthPageTransformer 不再正常工作。

当我向 ViewPager 添加 Fragment 并重新创建包含 ViewPager 的 Activity 时,DepthPageTransformer 似乎将 alpha 设置为零,并且在我拖动 ViewPager 之前什么都没有显示。拖动后, ViewPager 工作正常。

4

2 回答 2

1

以下代码经过测试并且工作正常:首先,我将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,只需使用scaleX、scaleY 和translation 编写view.setAlpha(0)而不是ViewHelper.setAlpha(view,0)等等。

于 2014-04-05T13:44:43.610 回答
0

好吧,我只是完全删除了 if 子句,它似乎工作得很好。

于 2013-08-05T15:59:25.490 回答