Android - Пользовательская анимация на транзакции фрагмента не запущена
Я использую Google API 8 (Android 2.2) с пакетом поддержки v4.
Он не дает никакой ошибки или анимации.
Сделка:
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.content, myFragment);
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.commit();
анимаций:
slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<translate
android:duration="700"
android:fromXDelta="-100%"
android:toXDelta="0%" >
</translate>
</set>
slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="700"
android:fromXDelta="0%"
android:toXDelta="100%" >
</translate>
</set>
Кто-нибудь знает, что здесь происходит?
Ответы
Ответ 1
Менеджер уложил мою транзакцию до того, как я установил анимацию, поэтому она стекирует транзакцию без анимаций (грустная, но истинная), и это происходит, даже если я совершу транзакцию после setCustomAnimations()
.
Решение состоит в том, чтобы сначала установить анимацию:
FragmentTransaction transaction = manager.beginTransaction();
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
transaction.replace(R.id.content, myFragment);
transaction.commit();
Ответ 2
Как было сказано выше, отдельные заявления, безусловно, будут работать. Но трюк здесь равен setCustomAnimation
, прежде чем устанавливать тип транзакции: add
, replace
и т.д., Иначе это не так. Итак, применяя ту же логику, method chaining
также работает. например.
getSupportFragmentManager().beginTransaction().
setCustomAnimations(R.anim.a_slide_up, R.anim.a_slide_down, R.anim.a_slide_up, R.anim.a_slide_down).
add(R.id.root_layout, MyFrag.newInstance().
addToBackStack("MyFrag").
commit();
Поместите его сюда, чтобы кто-то, предпочитающий method chaining
, нашел его полезным. Ура!
Ответ 3
Оставив это здесь как самый популярный вопрос. У меня была та же проблема, что и транзакция фрагмента, не анимация. У виновника был атрибут android:animateLayoutChanges
установлен на true
в содержащем макете.
Я надеюсь, что это поможет кому-то сэкономить время на поиск решения, поскольку его трудно заметить при наличии вложенных макетов в разных файлах.