FragmentTransation setCustomAnimations не работает
Я пытаюсь использовать новый пакет совместимости android для включения фрагментов в мой проект. Я пытаюсь включить анимацию перехода, когда я добавляю новый фрагмент. Это только одна из моих анимационных работ. Анимация In работает, но анимация Out не работает. Я где-то читал, что это ошибка в пакете совместимости. Но я также прочитал, что ошибка была исправлена в 3-й редакции пакета совместимости. Может ли кто-нибудь помочь мне с этой проблемой
In Анимация
<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"/>
Анимация
<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();
3 ответов
это работает в текущей версии библиотеки, но она определенно была нарушена ранее. Вы можете использовать что-то вроде этого:
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();
где Р. аним.slide_up - это ваша анимация и R. anim.slide_down ваша анимация. Вторая пара параметров (3 и 4) для setCustomAnimations позволяет указать анимацию pop in/out для выскакивания backstack (например, когда пользователь нажимает назад, фрагмент будет анимироваться с анимацией, указанной в качестве четвертой param).
Я нашел обходной путь для этого. Переопределите 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);
}
Я тоже сталкиваюсь с той же проблемой, вот моя ситуация:
- Я хочу сделать некоторые изменения пользовательского интерфейса после выхода анимации. но я обнаружил, что анимация выхода не работает. мои коды изменения пользовательского интерфейса находятся в onBackPressed ().
мое решение выглядит следующим образом:
- переместить логику изменения пользовательского интерфейса в onCreateAnimator (). и тогда выход из анимации работает.