setCustomAnimations(int enter, int exit)
Выходная анимация должна быть пустой (потому что вам нужно, чтобы старый фрагмент оставался на экране, пока появляется новый), но если вы передадите от 0 до второго параметра, представление исчезнет без анимации.Вот почему я добавляю пустую альфа-анимацию, которая меняет альфа с 1 на 1.
fragmentTransaction.setCustomAnimations(R.anim.anim_in_test, R.anim.anim_out_test);
anim_out_test.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
android:duration="@android:integer/config_longAnimTime"
android:fromAlpha="1"
android:toAlpha="1" />
</set>
Но в этот момент она не работает, потому что Android рисует и анимирует новыйфрагмент НИЖЕ старый фрагмент.Вы можете увидеть это, если сделаете фоновые фрагменты прозрачными.
Для решения этой проблемы я использую методы setZ(z)
, setElevation(z)
или setTranslationZ(z)
для корневого просмотра фрагмента.Похоже, все они работают.Z
значение нового фрагмента должно быть больше старого фрагмента Z
.
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.view, container, false);
view.setZ(value);
Вот результат:
![enter image description here](https://i.stack.imgur.com/pB7mN.gif)
Это работает, но я не знаю побочных эффектов этого решения.На Android 4 я думаю, что это можно сделать через пользовательский ViewGroup
как контейнер фрагментов, который рисует детей в обратном порядке.