Вопрос по android-fragments, android, android-animation – Android - пользовательская анимация при фрагменте транзакции не работает

72

I'm using Google API 8 (Android 2.2) with support package 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>

Кто-нибудь знает, что здесь происходит?

Фрагменты не были представлены до Honeycomb (API 11, Android 3.0). Это может быть проблемой, но я бы подумал, что «Затмение» скажет вам. Steve Blackwell
Вот почему я использую пакет поддержки. adheus

Ваш Ответ

4   ответа
231

как я установил анимацию, поэтому он укладывает транзакцию без анимации (грустно, но верно), и это происходит, даже если я фиксирую транзакцию после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();
@sherpya, что ты имеешь в виду самовосстановление объекта трюк.
так что вы должны разделить оператор, избегая уловки самовосстановленного объекта
Просто чтобы заметить, "само возвращаемый объект трюк" называется «сцепление методов»
Метод цепочки вышеуказанного вызова определенно работает. Просто проверил это в моем собственном проекте.
transaction.something().somethingelse().replace().commit()многие методы Android возвращаютсяthis так что вы можете избежать повторного ввода переменной, но как-то здесь выявляется побочный эффект иsetCustomAnimations() должен быть вызван отдельно
16

отдельные заявления определенно будут работать. Ноtrick here это к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 находит это полезным. Ура!

4

роблема с фрагментом транзакции без анимации. Виновник имел атрибутandroid:animateLayoutChanges установлен вtrue в содержащем макете.

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

0

fragmentTransaction.show() перед фиксацией Это делает поп-переходы не отображаемыми в некоторых версиях API Android.

Похожие вопросы