活动animation从底部滑动

我用的是什么:

activity_stay.xml

    

activity_slide_to_bottom.xml

     

activity_slide_from_bottom.xml

     

启动NewActivity:

 startActivity(NewActivity.getIntent(this)) overridePendingTransition(R.anim.activity_slide_from_bottom, R.anim.activity_stay) 

NewActivity完成():

 finish() overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom) 

当NewActivity启动时,OldActivity消失 – 我看到空白的白色屏幕,NewActivity滑到顶部。 但是我需要的是我的NewActivity在启动时滑到OldActivity内容之上。 我怎样才能做到这一点?

UPD :当我因为某些原因完成NewActivity时,所有animation都完美地执行:NewActivity滑到底部,OldActivity内容出现在NewActivity内容之下。

activity_slide_from_bottom.xml

   

activity_slide_to_bottom.xml

   

activity_stay.xml

   

启动NewActivity:

 startActivity(NewActivity.getIntent(this)); overridePendingTransition(R.anim.activity_slide_from_bottom, R.anim.activity_stay) 

NewActivity完成():

 @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom); } 

此外,animation可以在样式中声明

  

在主题中设置此样式:

  

将主题设置为清单中的活动

  

机器人:activityOpenEnterAnimation

打开新活动时,这是在下一个活动(即进入屏幕)上运行的animation

机器人:activityOpenExitAnimation

打开新活动时,这是在上一个活动(即退出屏幕)上运行的animation。

机器人:activityCloseEnterAnimation

关闭当前活动时,这是在下一个活动(即进入屏幕)上运行的animation。

机器人:activityCloseExitAnimation

关闭当前活动时,这是在当前活动(即退出屏幕)上运行的animation。

机器人:windowReenterTransition

引用Transition XML资源,定义所需的Transition,用于在从先前启动的Activity返回时将Views移动到场景中。 对应于Window.setReenterTransition(android.transition.Transition).

android:windowReturnTransition引用Transition XML资源,定义所需的Transition,用于在Window准备关闭时将视图移出场景。 对应于Window.setReturnTransition(android.transition.Transition).

参考: https : //developer.android.com/reference/android/R.attr

您可以使用以下代码实现animation:

bottom_up.xml:

     

bottom_down.xml:

     

nothing.xml:

   

开始第二项活动:

 Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); overridePendingTransition(R.anim.bottom_up, R.anim.nothing); 

完成第二项活动:

 @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.nothing, R.anim.bottom_down); } 

文档:

使用animation启动活动材料设计应用程序中的活动转换通过公共元素之间的运动和转换提供不同状态之间的可视连接。 您可以为进入和退出转换以及活动之间的共享元素转换指定自定义animation。

输入转换确定活动中的视图如何进入场景。 例如,在爆炸输入转换中,视图从外部进入场景并向屏幕中心飞入。 退出转换确定活动中的视图如何退出场景。 例如,在爆炸退出过渡中,视图将离开中心离开场景。

指定自定义过渡首先,在定义从材质主题inheritance的样式时,使用android:windowActivityTransitions属性启用窗口内容过渡。 您还可以在样式定义中指定enter,exit和shared元素过渡:

  

请检查文档。 这里

在此处输入图像描述

请享用!!

根据文件:

public void overridePendingTransition(int enterAnim,int exitAnim)在startActivity(Intent)或finish()之一之后立即调用,以指定要执行的显式转换animation。

从Build.VERSION_CODES.JELLY_BEAN开始,将其与启动活动一起使用的另一种方法是通过ActivityOptions包向startActivity(Intent,Bundle)或相关函数提供所需的animation信息。 这允许您指定自定义animation,即使在当前顶级活动的上下文之外启动活动时也是如此。

这意味着在startActivity(Intent, Bundle)之后添加overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom) startActivity(Intent, Bundle)应该提供所需的结果。

编辑:

android:activityOpenEnterAnimation android:activityOpenExitAnimation android:activityCloseEnterAnimation android:activityCloseExitAnimation

影响活动

android:windowEnterTransition android:windowExitAnimation android:windowReenterTransition android:windowReturnTransition

影响窗口

有关活动与窗口的更多信息:

一个Activity有一个窗口(在其中绘制其用户界面),

一个Window有一个Surface和一个附加到它的视图层次结构,

Surface包含保存视图的ViewGroup。

来源: 什么是Android窗口?

总之,您可以使用它们来实现相同的结果,但它们是不同的。

我认为Animations API更适合Transitions API,以满足您的目标。 以下是详细说明: https : //www.reddit.com/r/androiddev/comments/8wqjzv/difference_between_animation_and_transitions_api/

试试下面,

slide_in_up.xml

   

slide_out_down.xml

   

no_anim.xml

   

启动NewActivity:

 startActivity(NewActivity.getIntent(this)) overridePendingTransition(R.anim.slide_in_up, R.anim.no_anim); 

NewActivity完成():

 finish(); overridePendingTransition(R.anim.no_anim, R.anim.slide_out_down); 

最好的方法是使用样式,因为如果您想在所有活动中使用此animation,则无需在每个Activity中编码。

我总是使用最短的方式

在所有活动中设置幻灯片主题

  

在一个活动中设置幻灯片主题

  

slide_from_bottom.xml放入res> anim中

   

slide_to_bottom.xml放入res> anim中

   

none.xml放在res> anim中

   

将此样式放在res> values> styles.xml中

   

您可以根据需要更改android:duration="@android:integer/config_longAnimTime"持续时间。 现在你很高兴。

 overridePendingTransition(R.anim.slide_in_up, R.anim.stay); 

stay.xml: