我想在片段之间实现Crossfade动画(不是淡出/淡入动画,因为它允许在动画之间简单地看到底层的Activity /片段)
Android开发人员有如何使用Crossfade视图的指南 " Crossfading Two Views"但是我没有得到如何在片段或活动之间实现Crossfade。以某种方式制作自定义动画并覆盖onCreateAnimator函数或甚至可能吗??
答案 0 :(得分:10)
尝试使用此活动(可以将其添加到某些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)
答案 1 :(得分: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())