安卓Activity转场动画

10
我想实现的是:仅为退出的活动启动具有过渡动画的新活动。
我想让当前活动向上滑动,在新活动位于当前活动后面。
这是向上滑动的动画:R.layout.slide_up

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="1000"
        android:fromYDelta="0%"
        android:toYDelta="100%" />

</set>

以下是我如何应用活动动画过渡的方法:

这里是我如何应用活动动画过渡的方法:

overridePendingTransition ( 0 , R.anim.slide_up );

我在进入新活动时使用0,因为我不想要任何动画效果,但是它没有生效(动画未执行)。如果我也为进入活动使用动画,则两个动画都会执行,例如:

overridePendingTransition ( R.anim.slide_out , R.anim.slide_up );

其中 R.anim.slide_out

<set xmlns:android="http://schemas.android.com/apk/res/android">

    <translate
        android:duration="1000"
        android:fromYDelta="100%"
        android:toYDelta="0%" />

</set>

任何想法?
我正在处理Android 4.1.2和Android 4.0.4。
4个回答

14
修改退出动画,使其在进入的活动之上呈现。

R.anim.slide_up

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:zAdjustment="top">

    <translate
        android:duration="1000"
        android:fromYDelta="0%"
        android:toYDelta="100%" />

</set>

然后,您可以继续进行最初设置动画的操作。
overridePendingTransition ( 0 , R.anim.slide_up );

3

在startActivity()方法后调用以下方法。

 overridePendingTransition(0,0);

这将覆盖默认动画并取消所有动画。如果您喜欢,还可以提供一些自定义动画。

overridePendingTransition(R.anim.animation1, R.anim.animation2);


3

我有完全相同的过渡效果,这种动画对我有效:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromYDelta="0%" android:toYDelta="100%" android:zAdjustment="top"
android:duration="300" />  

1
这是因为它们的转换并不完全相同。您设置了zAdjustment="top"属性,允许退出动画在进入动画之上播放,因为默认情况下,进入动画会在退出动画之上播放。 - Michael Celey

0

无论您在何处调用意图以启动Activity,都需要修改意图。 ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(AlbumListActivity.this); startActivity(intent, options.toBundle());

如果您有任何专用于setupTransitions()的方法,您可以将下面两行代码放在那里,否则您可以将它们放在onCreate()中。

getWindow().setEnterTransition(new Slide(Gravity.RIGHT).setDuration(800));

Gravity.RIGHT 决定了您希望从哪个方向启动下一个 Activity。 setDuration() 方法是可选的,我使用它可以使过渡更加平滑,但您不必这样做。

通过尝试不同的 Gravity 和 setDuration 属性来进一步探索。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接