片段或活动之间的交叉淡入淡出动画
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())
我想在片段之间实现 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())