片段进入和退出转换不会同时执行

Fragment enter and exit transitions are not executed at the same time

运行 进入和现有片段的简单向左滑动动画会产生进入片段与退出片段略微重叠的效果。这让我认为这两个转换不是同时执行的。此行为有任何线索或确认吗?

想要的效果是片段同时向左滑动,不重叠

代码:

Fragment current = ...;
Fragment fragment = ...;
Transition slideIn = TransitionInflater.from(this)
     .inflateTransition(R.transition.fragment_indicator_enter)
     .setDuration(300)
     .setInterpolator(new LinearInterpolator());
fragment.setEnterTransition(slideIn);

currentFragment.setExitTransition(TransitionInflater.from(this)
     .inflateTransition(R.transition.fragment_indicator_exit)
     .setDuration(300)
     .setInterpolator(new LinearInterpolator()));

getSupportFragmentManager()
     .beginTransaction()
     .replace(R.id.fragment_container, fragment)
     .addToBackStack(null)
     .commit();

已知的唯一解决方法是为进入转换添加 setStartDelay(30)。但奇怪的是,我对不同的片段有不同的过渡,并且 startDelay 必须不同才能产生两个片段同时向左滑动的效果。

您是否尝试过将动画直接放在交易调用中?

getSupportFragmentManager()
 .setCustomAnimations(R.transition.fragment_indicator_enter, R.transition.fragment_indicator_exit)
 .beginTransaction()
 .replace(R.id.fragment_container, fragment)
 .addToBackStack(null)
 .commit();

该效果是过渡的预期行为,因为布局中的所有视图都在不同的时间移动,以避免将所有内容作为一个块移动,从而创建一些自然的运动感。我有意想要这种块效果,所以通过添加一个过渡目标来解决,这个目标是包含片段视图的 FrameLayout。

fragment.setEnterTransition(new Slide(Gravity.RIGHT)
                    .addTarget(R.id.whole_content));