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