Фрагмент входных и выходных переходов не выполняется одновременно
Запуск простого слайда влево для анимации как входящего, так и существующего фрагмента приводит к тому, что входящий фрагмент слегка перекрывается с выходным фрагментом. Это заставляет меня думать, что оба перехода не выполняются одновременно. Любая подсказка или подтверждение этого поведения?
Желаемый эффект - сдвигать фрагменты влево одновременно, без наложения.
Код:
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();