Android: Что случилось с моей анимацией перехода фрагмента?

Мне нужен простой слайд и анимация анимации для перехода фрагмента, ниже мой код: slide_in_left.xml:

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="true">
<translate
    android:fromXDelta="-100%"
    android:toXDelta="0%"
    android:fromYDelta="0%"
    android:toYDelta="0%"
    android:duration="700">
</translate>
</set>

slide_out_right.xml:

<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<translate
    android:fromXDelta="0%" android:toXDelta="100%"
    android:fromYDelta="0%" android:toYDelta="0%"
    android:duration="700">
</translate>
</set>

код, который я использовал:

SomeFragment frag = SomeFragment.newInstance(foo);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.the_fragment, frag);
ft.addToBackStack(null);

ft.commit();

Результат выглядит очень странно, когда начинается переход, текущий фрагмент исчезает без анимации, входящий фрагмент приходит (слева), как прокрутка. Что не так с моим XML-кодом анимации?

Спасибо!

Ответ 2

Google обновил библиотеку совместимости, и переходы были исправлены. Вы, ребята, должны обновить свою библиотеку совместимости от менеджера Android sdk/avd.

Ответ 3

Я нашел прохладный пост здесь об ошибке анимации библиотеки фрагментов, я взял второй подход

..... Вызвать FragmentTransaction.setCustomAnimations(), ссылаясь либо на аниматоры, либо на анимацию (в зависимости от того, используете ли вы библиотеки совместимости или нет). Интересно, что setCustomAnimations() влияет на все переходы фрагментов, добавленные в транзакция после ее вызова. Поэтому вам нужно позвонить setCustomAnimations(), прежде чем вы хотите, чтобы он использовался, и вы можете на самом деле настроить несколько различных пользовательских анимаций для каждой части транзакции (с вызовом setCustomAnimations() перед каждым Добавить()/удалить()/присоединять()/отсоединять()/шоу()/скрыть()/заменить())......

как это

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.push_up_in,R.anim.push_up_out);
ft.commit();
ft = getSupportFragmentManager().beginTransaction();
ft.setCustomAnimations(R.anim.push_up_in,R.anim.push_up_out);
if (fragment1.isHidden()) {
ft.show(fragment1);
} else {
ft.hide(fragment1);

}
ft.commit();

С этим я решил проблему для уровня api 11, надеюсь, что это сработает!

Ответ 4

Если вы используете ViewPager

mPager.setOffscreenPageLimit(YourFragmentsSize); 

Эта линия решила мою проблему, и для вас тоже надежда. Ссылка из этого раздела