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

使用registerForActivityResult启动Activity时窗口动画不生效问题

问题分析与解决方法

1. 先检查动画资源是否正确实现右侧滑入逻辑

你需要确保activity_enter.xml和activity_exit.xml的动画代码是正确的右侧滑入/滑出逻辑,比如:

  • activity_enter.xml(MapActivity从右侧滑入):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="100%p"
        android:toXDelta="0" />
    <alpha
        android:duration="300"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
</set>
  • activity_exit.xml(MapActivity滑出到右侧):
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="300"
        android:fromXDelta="0"
        android:toXDelta="100%p" />
    <alpha
        android:duration="300"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
</set>

如果动画文件本身逻辑错误,无论怎么配置都只会显示默认动画。

2. 修正ActivityOptionsCompat的参数逻辑

ActivityOptionsCompat.makeCustomAnimation的第二个参数是新Activity的进入动画,第三个参数是当前Fragment所在Activity的退出动画,你可能混淆了动画的作用对象:

// 假设当前Activity的退出动画是slide_out_left.xml(从左侧滑出)
val options = ActivityOptionsCompat.makeCustomAnimation(
    requireActivity(),
    R.anim.activity_enter, // MapActivity的进入动画
    R.anim.slide_out_left  // 当前Activity的退出动画
)
openMapResultLauncher.launch(intent, options)

如果只给新Activity设置进入动画,当前Activity用默认退出动画,可能会和你想要的效果冲突,导致看起来还是默认动画。

3. 确保主题正确应用且无覆盖

  • 检查AndroidManifest中MapActivity的主题配置是否正确:
<activity
    android:name=".MapActivity"
    android:theme="@style/MapTheme" />
  • 尝试在MapTheme中显式禁用父主题的默认动画,添加:
<item name="windowAnimationStyle">@style/MapTheme.WindowAnimationStyle</item>
<item name="android:windowAnimationStyle">@style/MapTheme.WindowAnimationStyle</item>

(同时添加带android前缀和不带的,避免Material Components主题的属性覆盖)

4. 放弃overridePendingTransition方案

overridePendingTransition必须在startActivity或finish之后立即调用,但使用ActivityResultLauncher.launch时,启动逻辑被封装在内部,你无法在正确时机调用该方法,所以这种方式本身就不会生效。

5. 检查MapActivity的launchMode

如果MapActivity的launchMode设置为singleInstance、singleTask等,系统会跳过默认的过渡动画,需要在Manifest中移除特殊launchMode,或者在启动时显式指定动画。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:38:11