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 67

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 содержащий макет.

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

еще одна причина может быть излишне размещение fragmentTransaction.show() прежде чем совершить. Это делает поп-переходы не отображаются на некоторых версиях Android API.