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

3

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

期望的效果是同时将片段向左滑动,而不重叠。

代码:

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必须不同才能产生两个片段同时向左滑动的效果。
2个回答

3

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

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

1
除了幻灯片之外,还有哪些过渡效果可用?有没有可以查看的列表? - SwiftiSwift
已知的直接子类:https://developer.android.com/reference/android/transition/Transition - mixer

0

你尝试过直接将动画放置在事务调用中吗?

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

谢谢您的建议,但这在我的情况下无效。我想使用内容转换(棒棒糖API),这并不完全相同。我使用自定义转换将不同的效果应用于不同的目标视图。 - juanmeanwhile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接