Android横屏模式下Activity转场动画失效,竖屏正常求助
搞定横屏转场动画失效的问题
嘿,我遇过一模一样的坑!你的竖屏动画正常、横屏失效,核心问题出在动画里的百分比计算逻辑上——咱们一步步来修复:
先改动画资源的核心参数
你当前写的android:fromXDelta="100%"是相对于目标View自身宽度来算位移的,但横屏时,Activity的实际屏幕宽度和View自身宽度完全不匹配(横屏时屏幕宽度是竖屏时的高度),导致动画位移的距离根本不对,看起来就像没生效。
把动画里的百分比改成基于父容器(也就是整个屏幕)的百分比,只需要加个p后缀就行:
修改后的right_to_left.xml完整代码:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="@android:integer/config_shortAnimTime" android:fromXDelta="100%p" <!-- 改成100%p,代表屏幕宽度的100% --> android:toXDelta="0%p" <!-- 对应改成0%p --> android:interpolator="@android:anim/linear_interpolator"/> </set>
别忘了对应的退出动画(比如left_to_right.xml)也要同步修改:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="@android:integer/config_shortAnimTime" android:fromXDelta="0%p" android:toXDelta="-100%p" android:interpolator="@android:anim/linear_interpolator"/> </set>
确认动画调用的时机没问题
确保你在启动新Activity后立刻调用overridePendingTransition,而且这个代码在横竖屏模式下都会执行:
// 启动目标Activity Intent intent = new Intent(this, TargetActivity.class); startActivity(intent); // 马上应用转场动画,顺序别搞反 overridePendingTransition(R.anim.right_to_left, R.anim.left_to_right);
额外排查小细节
如果改完还是不行,检查这几个点:
- 看看你的Activity主题有没有禁用动画:比如主题里写了
android:windowAnimationStyle="@null",这会直接覆盖自定义动画。 - 确认横屏和竖屏用的是同一个主题,有些单独的横屏主题配置可能会搞砸动画。
- 要是用了Android 5.0+的Material转场动画,别和旧版的
overridePendingTransition混用,两者冲突会导致动画失效。
这样调整后,横屏的转场动画应该就能正常滑入滑出了——现在动画的位移是基于整个屏幕的宽度,横竖屏的逻辑就统一啦!
内容的提问来源于stack exchange,提问作者Emre Alparslan




