我正在尝试对活动转换做一些简单的动画。当我从活动 A 启动活动 B 时,我希望活动 A 从屏幕左侧离开,而活动 B 从右侧滑入。
深入研究文档后,我发现了这个公式:
if (Build.VERSION.SDK_INT >= 34) {
overrideActivityTransition(
ComponentActivity.OVERRIDE_TRANSITION_OPEN,
R.anim.slide_in_from_right,
R.anim.slide_out_left
)
} else overridePendingTransition(
R.anim.slide_in_from_right,
R.anim.slide_out_left
)
在我的项目中,大多数时候(当SDK < 34), it kinda' works. Activity B slides in from the right and activity A, after flickering and changing it's background to white, disappears.
当 SDK = 34 时,活动 B 从左向右滑动,位于活动 A 之上。我还没有弄清楚
overrideActivityTransition
到底是做什么的,或者 OVERRIDE_TRANSITION_OPEN
或 OVERRIDE_TRANSITION_CLOSE
真正意味着什么。我原以为它适用于 API 34,但它做了其他事情。
以下是动画: 从右侧滑入
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300">
<translate
android:fromXDelta="100%"
android:toXDelta="0%"
/>
</set>
向左滑出
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300">
<translate
android:fromXDelta="0"
android:toXDelta="-100%"
/>
</set>
我尝试了一些其他的方法,但似乎没有任何效果。我唯一需要的是一个简单的滑动动画。
这个问题有两种解决方案;
1.)您可以更改每个 Activity 打开和关闭动画的动画,为此,您需要像这样更改清单文件
<style name="BaseAppTheme" parent="android:Theme.Material">
<!-- enable window content transitions -->
<item name="android:windowActivityTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@transition/explode</item>
<item name="android:windowExitTransition">@transition/explode</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">
@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">
@transition/change_image_transform</item>
</style>
有关官方答案,您可以查看此链接。
2.这是更基本的解决方案,它只会更改 1 个活动的动画,这是一种方法。
这是用于打开动画。
startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);
对于关闭动画,你可以这样使用
finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);