Подтвердить что ты не робот

FragmentTransation setCustomAnimations не работает

Я пытаюсь использовать новый пакет совместимости Android для включения фрагментов в свой проект. Я пытаюсь включить анимацию перехода, когда добавляю новый фрагмент. Дело только в моей анимационной работе. В анимации In работает, но анимация Out не работает.    Я где-то читал, что это ошибка в пакете совместимости. Но я также читал, что ошибка была исправлена ​​в третьей версии пакета совместимости. Может ли кто-нибудь помочь мне в этом вопросе?

В анимации

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/anticipate_interpolator"
android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="100%"        
android:toYDelta="0%"
android:duration="1000"/>

Out Animation

<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0"
android:toXDelta="0"
android:zAdjustment="top"
android:fromYDelta="0%"        
android:toYDelta="100%"
android:duration="1000"/>

Это код, который я использую для добавления фрагментов

newFragment = new HelloWorldFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.bottom_top_animation, R.anim.top_bottom_animation);
ft.add(R.id.outer_layout, newFragment);
ft.addToBackStack(null);
ft.commit();
4b9b3361

Ответ 1

Это работает в текущей версии библиотеки, но раньше она была сломана. Вы можете использовать что-то вроде этого:

final FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction ft = fm.beginTransaction();
ft.setCustomAnimations(R.anim.slide_up, R.anim.slide_down, R.anim.slide_up, R.anim.slide_down)
  .add(R.id.fragment_container, new SomeFragment(), FRAGMENT_TAG)
  .addToBackStack(FRAGMENT_TAG)
  .commit();

где R.anim.slide_up - ваша анимация, а R.anim.slide_down - ваша анимация. Вторая пара параметров (3 и 4) для setCustomAnimations позволяет вам указать анимацию pop/out для выскакивания backstack (например, когда пользователь нажимает назад, фрагмент будет анимировать анимацию, указанную как четвертый параметр).

Ответ 2

Я нашел обходное решение для этого. Переопределите onCreateAnimation (int transit, boolean enter, int nextAnim) в вашем классе фрагмента, а затем его работоспособность.

@Override
public Animation onCreateAnimation(int transit, boolean enter, int nextAnim) {
    return enter ? AnimationUtils.loadAnimation(getActivity(), R.anim.grow_fade_in_center) : AnimationUtils.loadAnimation(getActivity(), R.anim.shrink_fade_out_center);
}