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-кодом анимации?

Спасибо!


person Hao Zhe XU    schedule 11.05.2011    source источник
comment
Да вроде ObjectAnimator нет в пакете совместимости....   -  person    schedule 13.12.2011


Ответы (4)


getSupportFragmentManager() означает, что вы используете пакет совместимости для фрагментов, я думаю. У меня такая же проблема, анимация вообще не происходит.

См. http://groups.google.com/group/android-developers/browse_thread/thread/5ef5ba1be9f40c56/a846578d91a032c0?hide_quotes=yes#msg_8ca017c473818a04

person strem    schedule 16.05.2011

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

person FHan    schedule 30.05.2011
comment
Я подтверждаю, последняя версия библиотеки поддержки Google не решает проблему. - person alfdev; 09.06.2015

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

..... Вызовите FragmentTransaction.setCustomAnimations(), ссылаясь либо на аниматоров, либо на анимации (в зависимости от того, используете ли вы библиотеку совместимости или нет). Что интересно, setCustomAnimations() влияет на все переходы фрагментов, добавленные в транзакцию после ее вызова. Таким образом, вам нужно вызвать setCustomAnimations(), прежде чем вы захотите его использовать, и вы фактически можете настроить несколько различных пользовательских анимаций для каждой части транзакции (с вызовом setCustomAnimations() перед каждым add()/remove()/attach() /detach()/show()/hide()/replace())......

как это

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, надеюсь, это сработает!

person 47tucanae    schedule 10.09.2012

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

mPager.setOffscreenPageLimit(YourFragmentsSize); 

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

person yahya    schedule 15.11.2012