You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

overridePendingTransition已废弃,如何替换Activity切换与返回动画?

替代废弃overridePendingTransition的Activity动画解决方案

针对你的API 34目标、最低兼容API 28的场景,以下是两种无需使用废弃API的动画控制方案:

方案1:通过Theme统一配置动画(推荐)

定义包含完整动画配对的样式,为SettingsActivity指定该主题,一次性控制启动和返回的所有动画:

  1. 在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为自定义动画资源。

  1. 在AndroidManifest.xml中为SettingsActivity绑定该主题:
<activity
    android:name=".SettingsActivity"
    android:theme="@style/SettingsActivityAnimation"/>
  1. 启动代码可简化为:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:50:33