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
相关产品推荐
相关产品推荐

