在片段或活动之间实现渐变动画

7
我希望能在片段之间实现淡入淡出的交叉动画(不是淡出/淡入的动画,因为它允许在动画中短暂地看到底层的Activity/片段)。
安卓开发者有指南如何交叉淡化视图"交叉淡化两个视图",但我不知道如何实现在片段或活动之间进行交叉淡入淡出。
可以通过制作自定义动画并覆盖onCreateAnimator函数来实现吗?是否可能?
2个回答

17

尝试将以下内容放入一些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);
    }

淡入效果的位置:

<?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" />

以及淡出:

<?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" />

对于碎片(Fragments):

    FragmentTransaction transaction = supportFragmentManager.beginTransaction()

    transaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out,
                R.anim.fade_in, R.anim.fade_out)

1

这是一个有点老的问题,但我会提供我的碎片的淡入淡出动画版本。@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
                }
            }
        }
    }
}

我已经在我的活动中添加了下面的类,在那里我有我的 viewPager。 实现这个类后,当你设置你的 ViewPager 时需要添加以下内容:
viewPager.setPageTransformer(true, FadeBetweenFragments())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接