Фрагмент входных и выходных переходов не выполняется одновременно

Запуск простого слайда влево для анимации как входящего, так и существующего фрагмента приводит к тому, что входящий фрагмент слегка перекрывается с выходным фрагментом. Это заставляет меня думать, что оба перехода не выполняются одновременно. Любая подсказка или подтверждение этого поведения?

Желаемый эффект - сдвигать фрагменты влево одновременно, без наложения.

Код:

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 ответа

Решение

Эффект является ожидаемым поведением перехода, поскольку все виды в макете перемещаются в разное время, чтобы избежать перемещения всего как блока, что создает некоторое естественное ощущение движения. Я намеренно хочу этот эффект блока, поэтому он решается путем добавления цели для перехода, где эта цель - FrameLayout, содержащий представления фрагмента.

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

Вы пытались разместить анимацию прямо в вызове транзакции?

getSupportFragmentManager()
 .setCustomAnimations(R.transition.fragment_indicator_enter, R.transition.fragment_indicator_exit)
 .beginTransaction()
 .replace(R.id.fragment_container, fragment)
 .addToBackStack(null)
 .commit();
Другие вопросы по тегам