Android - пользовательская анимация при фрагменте транзакции не работает

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>

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

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

Ответы на вопрос(4)

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

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

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

Решение Вопроса

как я установил анимацию, поэтому он укладывает транзакцию без анимации (грустно, но верно), и это происходит, даже если я фиксирую транзакцию после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();
 08 апр. 2013 г., 10:31
так что вы должны разделить оператор, избегая уловки самовосстановленного объекта
 18 сент. 2013 г., 07:04
@sherpya, что ты имеешь в виду самовосстановление объекта трюк.
 10 янв. 2015 г., 22:56
Метод цепочки вышеуказанного вызова определенно работает. Просто проверил это в моем собственном проекте.
 18 сент. 2013 г., 17:55
transaction.something().somethingelse().replace().commit()многие методы Android возвращаютсяthis так что вы можете избежать повторного ввода переменной, но как-то здесь выявляется побочный эффект иsetCustomAnimations() должен быть вызван отдельно
 12 дек. 2014 г., 12:15
Просто чтобы заметить, "само возвращаемый объект трюк" называется «сцепление методов»

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

Ваш ответ на вопрос