活动过渡动画

问题描述 投票:0回答:1

我正在尝试对活动转换做一些简单的动画。当我从活动 A 启动活动 B 时,我希望活动 A 从屏幕左侧离开,而活动 B 从右侧滑入。

深入研究文档后,我发现了这个公式:

    if (Build.VERSION.SDK_INT >= 34) {
        overrideActivityTransition(
                ComponentActivity.OVERRIDE_TRANSITION_OPEN,
                R.anim.slide_in_from_right,
                R.anim.slide_out_left
            )
        } else overridePendingTransition(
            R.anim.slide_in_from_right,
            R.anim.slide_out_left
        )

在我的项目中,大多数时候(当SDK < 34), it kinda' works. Activity B slides in from the right and activity A, after flickering and changing it's background to white, disappears.

当 SDK = 34 时,活动 B 从左向右滑动,位于活动 A 之上。我还没有弄清楚

overrideActivityTransition
到底是做什么的,或者
OVERRIDE_TRANSITION_OPEN
OVERRIDE_TRANSITION_CLOSE
真正意味着什么。我原以为它适用于 API 34,但它做了其他事情。

以下是动画: 从右侧滑入

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="300">

        <translate
            android:fromXDelta="100%"
            android:toXDelta="0%"
     />
     </set>

向左滑出

    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:duration="300">
        <translate
            android:fromXDelta="0"
            android:toXDelta="-100%"
        />
    </set>

我尝试了一些其他的方法,但似乎没有任何效果。我唯一需要的是一个简单的滑动动画。

android kotlin android-activity
1个回答
0
投票

这个问题有两种解决方案;

1.)您可以更改每个 Activity 打开和关闭动画的动画,为此,您需要像这样更改清单文件

<style name="BaseAppTheme" parent="android:Theme.Material">
  <!-- enable window content transitions -->
  <item name="android:windowActivityTransitions">true</item>

  <!-- specify enter and exit transitions -->
  <item name="android:windowEnterTransition">@transition/explode</item>
  <item name="android:windowExitTransition">@transition/explode</item>

  <!-- specify shared element transitions -->
  <item name="android:windowSharedElementEnterTransition">
    @transition/change_image_transform</item>
  <item name="android:windowSharedElementExitTransition">
    @transition/change_image_transform</item>
</style>

有关官方答案,您可以查看此链接

2.这是更基本的解决方案,它只会更改 1 个活动的动画,这是一种方法。

这是用于打开动画。

startActivity();
overridePendingTransition(R.anim.hold, R.anim.fade_in);

对于关闭动画,你可以这样使用

finish();
overridePendingTransition(R.anim.hold, R.anim.fade_out);
© www.soinside.com 2019 - 2024. All rights reserved.