Android: что не так с моей анимацией перехода фрагмента? - PullRequest
10 голосов
/ 11 мая 2011

Мне просто нужна анимация слайдов и слайдов для перехода фрагментов, ниже приведен мой код: 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-кодом?

Спасибо!

Ответы [ 4 ]

5 голосов
/ 16 мая 2011

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

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

3 голосов
/ 30 мая 2011

Google обновил библиотеку совместимости, и переходы были исправлены. Ребята, вы должны обновить свою библиотеку совместимости из менеджера Android SDK / AVD.

2 голосов
/ 10 сентября 2012

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

..... Вызов 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 надеюсь, что это работает!

1 голос
/ 15 ноября 2012

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

mPager.setOffscreenPageLimit(YourFragmentsSize); 

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

...