片段或活动之间的交叉淡入淡出动画

Crossfade animation between fragments or Activities

我想在片段之间实现 Crossfade 动画(不是 fade-out/fade-in 动画,因为它允许在动画之间短暂地看到底层 Activity/fragment)

Android 开发人员有如何交叉淡入淡出视图的指南 “Crossfading Two Views”但我不知道如何在片段或活动之间实现交叉淡入淡出。

以某种方式制作自定义动画并覆盖 onCreateAnimator 函数,或者甚至可能吗??

为 Activity 尝试这个(这可以放入一些 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)

这是一个有点老的问题,但我会为 fragments 添加我的交叉淡入淡出动画版本。 @Demonick 对片段的回答对我不起作用,因为我对我的片段使用了 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
                }
            }
        }
    }
}

我在我的 activity 中添加了下面的 class 我有我的 viewPager。 实施 class 后,您需要在设置 ViewPager 时添加以下内容:

viewPager.setPageTransformer(true, FadeBetweenFragments())