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

Android 34中overrideActivityTransition无法实现Activity转场如何解决?

解决Android 34+转场失效问题

核心问题:调用时机错误

overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, ...)与旧方法overridePendingTransition的调用时机完全相反:

  • 旧方法overridePendingTransition需在startActivity()之后立即执行
  • 新方法overrideActivityTransition(OVERRIDE_TRANSITION_OPEN)必须在startActivity()之前调用

正确代码实现

在按钮点击逻辑中按以下顺序编写:

// 先设置转场动画
overrideActivityTransition(OVERRIDE_TRANSITION_OPEN, R.anim.slide_in_left, R.anim.slide_out_right);
// 再启动Sub-Activity
startActivity(new Intent(MainActivity.this, SubActivity.class));

验证动画资源有效性

确保你的动画文件逻辑正确:

  • res/anim/slide_in_left.xml(Sub-Activity左滑入):
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="100%"
    android:toXDelta="0%"
    android:duration="300"/>
  • res/anim/slide_out_right.xml(MainActivity右滑出):
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromXDelta="0%"
    android:toXDelta="-100%"
    android:duration="300"/>

兼容性替代方案(推荐)

如果新方法仍存在问题,可使用跨版本兼容的ActivityOptions.makeCustomAnimation(API 16+支持,Android 14可稳定运行):

Intent intent = new Intent(MainActivity.this, SubActivity.class);
ActivityOptions options = ActivityOptions.makeCustomAnimation(
    MainActivity.this,
    R.anim.slide_in_left,  // Sub-Activity进入动画
    R.anim.slide_out_right // MainActivity退出动画
);
startActivity(intent, options.toBundle());

额外排查点

  • 若Activity使用singleInstance/singleTask等特殊启动模式,可能干扰转场效果,建议先测试默认启动模式
  • 若启用了Predictive Back Gesture(Android 13+默认开启),可在AndroidManifest.xml的对应<activity>标签中添加android:enableOnBackInvokedCallback="false"临时禁用,排查是否为手势冲突导致的转场失效

内容的提问来源于stack exchange,提问作者GGK stands for Ukraine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:42:37