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

Android特定Activity进入/退出动画配置问题:B的退出动画不生效

解决方案:Activity B退出动画不生效的处理

核心逻辑澄清

overridePendingTransition(int enterAnim, int exitAnim)的参数规则要明确:

  • 第一个参数:新启动Activity(此处为C)的进入动画
  • 第二个参数:当前Activity(此处为B)的退出动画
    你的代码逻辑本身没问题,动画不生效通常是动画文件错误、调用时机不对,或是系统/主题限制导致的。

方案1:修正动画文件逻辑

确保slide_down.xml是让Activity向下滑出的正确配置,避免反向逻辑:
res/anim/slide_down.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="0%p"  <!-- 初始位置:屏幕内顶部 -->
    android:toYDelta="100%p" <!-- 结束位置:完全滑出屏幕下方 -->
    android:duration="300"   <!-- 动画时长,单位ms -->
    android:fillAfter="false"/>

res/anim/no_animation.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:fromYDelta="0"
    android:toYDelta="0"
    android:duration="0"/>

方案2:严格控制调用时机

overridePendingTransition必须在startActivity()之后立即执行,不能放在异步回调、延迟任务中,也不能被其他代码打断:

// Activity B中的正确写法
startActivity(new Intent(this, C.class));
// 紧跟在startActivity之后调用,无任何延迟
overridePendingTransition(R.anim.no_animation, R.anim.slide_down);

方案3:改用ActivityOptionsCompat(全版本适配)

这是官方推荐的动画启动方式,兼容性更强:

import androidx.core.app.ActivityOptionsCompat;

// Activity B中跳转C的代码
Intent intent = new Intent(this, C.class);
ActivityOptionsCompat options = ActivityOptionsCompat.makeCustomAnimation(
        this,
        R.anim.no_animation, // C的进入动画(无动画)
        R.anim.slide_down   // B的退出动画(向下滑出)
);
startActivity(intent, options.toBundle());

方案4:排查系统与主题限制

  1. 检查系统动画设置:进入手机「设置→开发者选项」,确保「窗口动画缩放」「过渡动画缩放」「动画程序时长缩放」都设为1x,设为0会导致所有自定义动画失效。
  2. 检查Activity主题:确保B的主题未禁用窗口动画,不要设置android:windowAnimationStyle="@null"。若要通过主题配置默认动画,可添加:
<!-- styles.xml中定义B的主题 -->
<style name="Theme.MyApp.BActivity" parent="Theme.AppCompat.Light">
    <item name="android:windowAnimationStyle">@style/BWindowAnim</item>
</style>

<style name="BWindowAnim">
    <item name="android:windowEnterAnimation">@anim/slide_up</item> <!-- 从A进入B的动画 -->
    <item name="android:windowExitAnimation">@anim/slide_down</item> <!-- B退出到C的动画 -->
</style>

然后在AndroidManifest.xml中给B配置该主题:

<activity
    android:name=".B"
    android:theme="@style/Theme.MyApp.BActivity"/>

注意:overridePendingTransition或ActivityOptions的设置会覆盖主题默认动画。


额外排查点

若以上方案均无效,检查C的启动模式是否为singleTask/singleInstance,这类模式可能跳过过渡动画,建议暂时改为默认的standard测试。

内容的提问来源于stack exchange,提问作者Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:53:18