You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动