overridePendingTransition已废弃,如何替换Activity切换与返回动画?
替代废弃
overridePendingTransition的Activity动画解决方案 针对你的API 34目标、最低兼容API 28的场景,以下是两种无需使用废弃API的动画控制方案:
方案1:通过Theme统一配置动画(推荐)
定义包含完整动画配对的样式,为SettingsActivity指定该主题,一次性控制启动和返回的所有动画:
- 在
res/values/styles.xml中添加自定义动画样式:
<style name="SettingsActivityAnimation" parent="@android:style/Animation.Activity"> <!-- 启动时:SettingsActivity进入动画 --> <item name="android:activityOpenEnterAnimation">@anim/right_slide_in</item> <!-- 启动时:父Activity退出动画 --> <item name="android:activityOpenExitAnimation">@anim/none</item> <!-- 返回时:父Activity恢复进入动画 --> <item name="android:activityCloseEnterAnimation">@anim/none</item> <!-- 返回时:SettingsActivity退出动画 --> <item name="android:activityCloseExitAnimation">@anim/right_slide_out</item> </style>
根据需求替换@anim/right_slide_out和@anim/none为自定义动画资源。
- 在
AndroidManifest.xml中为SettingsActivity绑定该主题:
<activity android:name=".SettingsActivity" android:theme="@style/SettingsActivityAnimation"/>
- 启动代码可简化为:
val intent = Intent(this, SettingsActivity::class.java) startActivity(intent)
方案2:代码动态控制返回动画
如果需要在特定场景下动态切换动画,可在SettingsActivity中处理返回逻辑时,通过ActivityOptions指定退出动画:
在SettingsActivity中重写返回事件:
override fun onBackPressed() { // 配置返回动画:第一个参数为父Activity恢复动画,第二个为当前Activity退出动画 val animBundle = ActivityOptions.makeCustomAnimation( this, R.anim.none, R.anim.right_slide_out ).toBundle() // 结束当前Activity并应用动画(API 21+支持) finishAndRemoveTask(animBundle) }
若需保留任务栈结构,API 33+可使用finishActivity(RESULT_OK, animBundle),旧版本可结合setResult()后调用finish(),确保父Activity恢复时无多余默认动画。
关键提示
- 动画配对逻辑:启动时的
activityOpenEnter/Exit对应返回时的activityCloseExit/Enter,需保证动画方向逻辑一致(如进入为右滑,退出对应右滑出)。 - 完全规避
overridePendingTransition(),遵循官方推荐的Theme或ActivityOptions控制方式。
内容的提问来源于stack exchange,提问作者Jonas Charrier
相关产品推荐
相关产品推荐

