Фрагменты, андроид: z Коррекция (z порядок) и анимация
Я использую библиотеку поддержки. Теперь я хочу, чтобы фрагмент смещался снизу, перемещая предыдущий предыдущий.
Для этого я использую это, чтобы сохранить предыдущий фрагмент (тот, который надвигается) до тех пор, пока новый фрагмент не будет на своем месте:
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="1.0" android:toAlpha="1.0"
android:duration="2500"
android:zAdjustment="bottom" />
это анимация, используемая для того, чтобы новый фрагмент соскальзывался снизу:
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p" android:toYDelta="0"
android:duration="@android:integer/config_mediumAnimTime"
android:zAdjustment="top"/>
Я установил регулировку z в нижнюю и верхнюю части для обоих, но все же анимация "внизу" все еще находится поверх нового фрагмента! Я тестировал продолжительность 2500, и он остается на вершине в течение всего времени.
Не работает ли z-настройка для анимации фрагментов?
Ответы
Ответ 1
В соответствии с этим нить в группе google для группы работает только для анимации окон.
"Настройка Z работает только для анимации окон. Я думал, что это задокументировано, но, видимо, нет".
- Dianne Hackborn (разработчик фреймворка Android)
Ответ 2
Я тоже застрял в этой проблеме. Поэтому вместо использования transaction.replace(containerId, newFragment)
я создал два контейнера для фрагментов, и теперь мой код выглядит как этот
Добавить первый фрагмент:
transaction.add(containerId1, firstFragment).commit();
Добавьте второй фрагмент с анимацией по первому:
findViewById(containerId2).bringToFront();
transaction.setCustomAnimations(R.anim.slide_in_up,
R.anim.stay).remove(oldFragment).add(containerId2, newFragment).commit()