我有一个默认加载了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
非常感谢任何帮助。
答案 0 :(得分:0)
将animationlistener设置为您的片段。 在动画运行之前,为你的rootview提供你希望纹波的颜色。在onAnimationEnd和onAnimationCanceled上为你的rootview提供你想要它的布局颜色。
此外,可见性“技巧”运行不稳定(imo) 试试ViewTreeObserver。
希望这会有所帮助:)