Пользовательские анимации фрагментов support-v4:27.1.0 не работают должным образом

Анимация фрагментов не работает должным образом с support-v4:27.1.0

getSupportFragmentManager()
       .beginTransaction()
       .setCustomAnimations(ENTER_ANIM , LEAVE_ANIM)
       .replace(R.id.main_activity_fragment_place_holder, fragment)
       .addToBackStack(tag)
       .commitAllowingStateLoss();

введите анимацию

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="500" />

оставить анимацию

<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="500" />

person Abdelstar Ahmed    schedule 08.03.2018    source источник
comment
ввод и выход из анимации, установленной с помощью setCustomAnimations()   -  person Abdelstar Ahmed    schedule 08.03.2018


Ответы (3)


Я только что столкнулся с той же проблемой. Библиотека поддержки 27.1.0, похоже, имеет проблему с переходами anim, использующими свойство alpha.

У меня сложилось впечатление, что механизм перехода неправильно реализует «заполнение после», так что альфа-фрагмент быстро возвращается к 1 до того, как фрагмент будет удален. Это вызывает эффект мерцания, при котором замененный фрагмент ненадолго виден, а затем исчезает.

Я решил проблему переключения на переходы animator.

т.е. заменил мой /res/anim/fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromAlpha="0"
    android:toAlpha="1"
    android:duration="500"
    />

с аналогичным /res/animator/fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<objectAnimator
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:propertyName="alpha"
    android:valueFrom="0"
    android:valueTo="1"
    android:duration="500"
    />

Я сделал то же самое для перехода fade_out.

person Alessandro Mulloni    schedule 16.03.2018

Эффект мерцания был исправлен в последней версии библиотеки поддержки 27.1.1. (см. вопрос 74051124)

person Thomas Vos    schedule 06.04.2018
comment
Должен быть принятый ответ. Я тестировал. Ошибка не существует в поддержке v27.1.1 - person Metehan Toksoy; 16.04.2018

У меня точно такая же проблема после обновления библиотеки поддержки с 27.0.2 до 27.1.0. Вместо плавного затухания фрагменты несколько раз мигают.

Вроде все аниматоры работают как положено, кроме alpha аниматоров.

Однако я нашел обходной путь для этой ошибки: если вы отключите анимацию ввода, переход все равно исчезнет. Он не тускнеет так же, как раньше, но выглядит хорошо (или даже лучше), на мой взгляд.

Новая анимация enter (которую я назвал nothing.xml):

<?xml version="1.0" encoding="utf-8"?>
<set/>
person Eirik W    schedule 13.03.2018