显示替换片段的过渡

时间:2015-04-08 03:38:28

标签: android android-5.0-lollipop transitions android-transitions fragment-transitions

我有一个默认加载了Fragment StatsDetailFragment的活动。

按下按钮,我使用以下代码替换片段。

getSupportFragmentManager().beginTransaction()
                .replace(R.id.stats_detail_container, projectEntryListFragment, ProjectEntryListFragment.FRAGMENT_ID)
                .addToBackStack(FRAGMENT_CHART)
                .commit();

我使用自定义转换类为ProjectEntryListFragment设置Enter Transition

public class RevealTransition extends Visibility {
    private final Point mEpicenter;
    private final int mSmallRadius;
    private final int mBigRadius;
    private final long mDuration;

    public RevealTransition(Point epicenter, int smallRadius, int bigRadius, long duration) {
        mEpicenter = epicenter;
        mSmallRadius = smallRadius;
        mBigRadius = bigRadius;
        mDuration = duration;
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
        Animator animator = ViewAnimationUtils.createCircularReveal(view, mEpicenter.x, mEpicenter.y,
                mSmallRadius, mBigRadius);
        animator.setDuration(mDuration);
        return new WrapperAnimator(animator);
    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues, TransitionValues endValues) {
        Animator animator = ViewAnimationUtils.createCircularReveal(view, mEpicenter.x, mEpicenter.y,
                mBigRadius, mSmallRadius);
        animator.setDuration(mDuration);
        return new WrapperAnimator(animator);
    }
}

过渡效果很好。但我面临的问题是,当在ProjectEntryListFragment上执行显示动画时,StatsDetailFragment已被删除,导致显示动画在空白背景上播放。我希望它可以在StatsDetailFragment上播放,以便在ProjectListFragment上播放显示转换时显示StatsDetailFragment。

我尝试添加新片段,但这只是在弹出后台堆栈时出错。

java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.support.v4.app.Fragment.getAllowReturnTransitionOverlap()' on a null object reference

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

将animationlistener设置为您的片段。 在动画运行之前,为你的rootview提供你希望纹波的颜色。在onAnimationEnd和onAnimationCanceled上为你的rootview提供你想要它的布局颜色。

此外,可见性“技巧”运行不稳定(imo) 试试ViewTreeObserver。

希望这会有所帮助:)