2012-02-15 39 views
36

我试图实现的是重写开始活动动画。在转换期间让旧活动出现在旧的活动之后

该动画应该给人一种旧活动在新活动之上的印象,然后向下滑出屏幕以显示新活动。我已经尝试了多种方式,例如使用overridePendingTransition(startAnim, exitAnim) 但问题是它们在同一时间线上都有动画。所以overridePendingTransition(R.anim.hold, R.anim.exit_slide_down);你永远不会看到退出动画,因为新的活动是最重要的。这可以通过框架来实现吗?

enter image description here

+0

我相信你可以推迟一个动画,对不起,虽然没有更多的帮助。 – Warpzit 2012-02-15 13:45:20

+0

可能的重复的[我可以更改Android的startActivity()过渡动画?](http://stackoverflow.com/questions/3515264/can-i-change-the-android-startactivity-transition-animation) – 2012-04-04 22:33:45

回答

31

实际上,我在动画文件中找到了一个名为android:zAdjustment的属性。

如果我把android:zAdjustment="bottom"置于hold.xml(屏幕2)和android:zAdjustment="top"push_down_out.xml(屏幕1),那么我可以得到想要的效果。

这绕过了z顺序问题(我认为这是一个与动画时间有关的问题,所以我咆哮了错误的树)。

约翰

+4

您能否包括您的动画文件的外观如何? – Emil 2012-08-06 20:29:54

+0

原来,这就是为什么我的过渡动画不在播放。作为额外的好处,我只需要将android:zAdjustment =“top”添加到exitanimation(我想要在顶部播放的那个),所以你甚至不需要“底部”。 – MacD 2012-12-31 17:50:07

+0

@johncc你可以请包括XML文件和源代码?谢谢! – 2013-09-03 09:11:13

30

我一直在试图解决一个示例项目的解决方案,我得到了它,此代码的工作:

呼叫与动画:

startActivity(new Intent(this, Activity2.class)); 
overridePendingTransition(R.anim.push_down_in,R.anim.push_down_out); 

R.anim .push_down_in:

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

R.anim.push_down_out:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromYDelta="0" android:toYDelta="100%p" android:duration="300"/> 
</set> 
+2

实际上,如果你给每个动画不同的持续时间,它给人留下非常酷的印象。例如,对于R.anim.push_down_in:'android:duration =“900”'和R.anim.push_down_out:'android:duration =“1500”' – mehmet 2014-04-08 10:32:49

7

为我的作品的解决方案:

R.anim.exit_slide_down

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

    <translate android:fromYDelta="0" 
       android:toYDelta="100%p" 
       android:duration="600" /> 
</set> 

...然后

Intent intent = new Intent(activity, SecondActivity.class); 
startActivity(intent); 
activity.overridePendingTransition(0, R.anim.exit_slide_down);