在转换期间,使新活动显示在旧活动之后

joh*_*ncc 36 animation android android-activity

我想要实现的是覆盖启动活动动画.

动画应该给人留下旧活动位于新活动之上的印象,然后向下滑动并离开屏幕以显示新活动.我已经尝试了多种方式,比如使用overridePendingTransition(startAnim, exitAnim) 但问题是它们都在同一时间轴中生成动画.因此,overridePendingTransition(R.anim.hold, R.anim.exit_slide_down);您永远不会看到退出动画,因为新活动位于顶部.这可以使用框架实现吗?

在此输入图像描述

joh*_*ncc 31

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

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

这绕过了z顺序问题(我认为这是一个动画时序的问题,所以我正在吠叫错误的树).

约翰

  • 你能否请说明动画文件的样子? (4认同)

Rom*_*iel 30

我一直在尝试在示例项目中解决您的解决方案,并且我使用此代码:

用以下方法调用动画:

startActivity(new Intent(this, Activity2.class));
overridePendingTransition(R.anim.push_down_in,R.anim.push_down_out);
Run Code Online (Sandbox Code Playgroud)

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>  
Run Code Online (Sandbox Code Playgroud)

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>  
Run Code Online (Sandbox Code Playgroud)

  • 实际上,如果你为每个动画提供不同的持续时间,它给人的印象非常酷.例如R.anim.push_down_in:`android:duration ="900"`和R.anim.push_down_out:`android:duration ="1500"` (2认同)

Luk*_* R. 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>
Run Code Online (Sandbox Code Playgroud)

...然后

Intent intent = new Intent(activity, SecondActivity.class);
startActivity(intent);
activity.overridePendingTransition(0, R.anim.exit_slide_down);
Run Code Online (Sandbox Code Playgroud)