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

时间:2016-05-09 10:05:13

标签: android android-fragments android-animation fragment-transitions

对于输入和现有片段,向左侧动画运行一个简单的幻灯片会产生输入片段与退出片段略微重叠的效果。这使我认为两个转换都不会同时执行。有这种行为的任何线索或确认吗?

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

代码:

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 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

您是否尝试将动画直接放入交易通话中?

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