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>
кто-нибудь знает, что здесь происходит?
4 ответа:
менеджер укладывал мою транзакцию до того, как я установил анимацию, поэтому он складывает транзакцию без анимации (грустно, но верно), и это происходит, даже если я совершаю транзакцию после
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();
как было предложено выше, отдельные заявления, безусловно, будет работать. Но это тут это
setCustomAnimationперед установкой типа транзакции viz.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находит его полезным. Ура!
оставляя это здесь, как это самый популярный вопрос. У меня была такая же проблема с транзакцией фрагмент не анимирует. У виновника был атрибут
android:animateLayoutChangesзначениеtrueсодержащий макет.Я надеюсь, это поможет кому-то сэкономить время на поиски решения, как это может быть трудно заметить, когда вложенные макеты в разных файлах.