Вопрос:

Перекрестная анимация между фрагментами или действиями

android android-fragments android-animation android-6.0-marshmallow

2130 просмотра

2 ответа

121 Репутация автора

Я хотел бы реализовать анимацию Crossfade между фрагментами (не анимацию постепенного исчезновения / постепенного появления, потому что она позволяет кратко видеть базовую активность / фрагмент между анимацией)

Для разработчиков Android есть руководства, как сделать Crossfade представления « Crossfading Two Views », но я не понимаю, как это можно реализовать для Crossfade между фрагментами или действиями.

Каким-то образом сделать пользовательскую анимацию и переопределить функцию onCreateAnimator или это вообще возможно?

Автор: Juge Источник Размещён: 08.01.2018 09:50

Ответы (2)


10 плюса

1538 Репутация автора

Решение

Попробуйте это для Активности (это может быть помещено в некоторую BaseActivity)

    @Override public void startActivity(Intent intent) {
        super.startActivity(intent);
        overridePendingTransition(R.anim.fade_in, R.anim.fade_out)
    }

    @Override public void finish() {
        super.finish();
        overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
    }

Где fade_in:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="@integer/activity_transition_duration"
       android:fromAlpha="0.0"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:toAlpha="1.0" />

и fade_out:

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:duration="@integer/activity_transition_duration"
       android:fillAfter="true"
       android:fromAlpha="1.0"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:toAlpha="0.0" />

Для фрагментов:

    FragmentTransaction transaction = supportFragmentManager.beginTransaction()

    transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out,
                R.anim.fade_in, R.anim.fade_out)
Автор: Demonick Размещён: 08.01.2018 10:38

1 плюс

17 Репутация автора

Это немного старый вопрос, но я добавлю свою версию анимации перекрестного затухания для фрагментов . @ Демонный ответ для фрагментов не сработал для меня, потому что я использую ViewPager для своих фрагментов, а использование FragmentTransaction - намного больше работы из того, что я видел.

private inner class FadeBetweenFragments : ViewPager.PageTransformer {

    private val MIN_SCALE = 0.1f
    private val MIN_ALPHA = 0.4f

    override fun transformPage(view: View, position: Float) {
        view.apply {
            alpha = when {
                position < -1 -> {
                    0f
                }
                position <= 1 -> {
                    val scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position))
                    (MIN_ALPHA +
                            (((scaleFactor - MIN_SCALE) / (1 - MIN_SCALE)) * (1 - MIN_ALPHA)))
                }
                else -> {
                    0f
                }
            }
        }
    }
}

Я добавил класс ниже в моей деятельности, где у меня есть viewPager. После реализации класса вам нужно добавить следующее при настройке ViewPager:

viewPager.setPageTransformer(true, FadeBetweenFragments())
Автор: HartWoom Размещён: 24.05.2019 03:45
Вопросы из категории :
32x32