活动动画从底部滑动

ole*_*g.v 15 android android-animation android-xml android-activity android-transitions

我用的是什么:

activity_stay.xml

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

    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0%p"
        android:toYDelta="0%p" />

</set>
Run Code Online (Sandbox Code Playgroud)

activity_slide_to_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator">

    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="0"
        android:toYDelta="100%p" />

</set>
Run Code Online (Sandbox Code Playgroud)

activity_slide_from_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_decelerate_interpolator">

    <translate
        android:duration="@android:integer/config_longAnimTime"
        android:fromYDelta="100%p"
        android:toYDelta="0" />

</set>
Run Code Online (Sandbox Code Playgroud)

启动NewActivity:

startActivity(NewActivity.getIntent(this))
overridePendingTransition(R.anim.activity_slide_from_bottom, R.anim.activity_stay)
Run Code Online (Sandbox Code Playgroud)

NewActivity完成():

finish()
overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom)
Run Code Online (Sandbox Code Playgroud)

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

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

SAN*_*NAT 22

您可以使用以下代码实现动画:

bottom_up.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1000"
        android:fromYDelta="90%"
        android:toYDelta="0" />
</set>
Run Code Online (Sandbox Code Playgroud)

bottom_down.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:duration="1500"
        android:fromYDelta="5"
        android:toYDelta="90%" />
</set>
Run Code Online (Sandbox Code Playgroud)

nothing.xml:

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />
Run Code Online (Sandbox Code Playgroud)

开始第二项活动:

Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.bottom_up, R.anim.nothing);
Run Code Online (Sandbox Code Playgroud)

完成第二项活动:

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.nothing, R.anim.bottom_down);
}
Run Code Online (Sandbox Code Playgroud)

文档:

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

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

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

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

请检查doc.这里

在此输入图像描述

请享用!!

  • android:activityOpenEnterAnimation android:activityOpenExitAnimation android:activityCloseEnterAnimation android:activityCloseExitAnimation和android:windowEnterTransition android:windowExitAnimation android:windowReenterTransition android:windowReturnTransition有什么区别?什么时候应该使用一个而不是另一个? (2认同)

Bhu*_* BS 10

activity_slide_from_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="100%p"
    android:toYDelta="0%p" />
Run Code Online (Sandbox Code Playgroud)

activity_slide_to_bottom.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="100%p" />
Run Code Online (Sandbox Code Playgroud)

activity_stay.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />
Run Code Online (Sandbox Code Playgroud)

启动NewActivity:

startActivity(NewActivity.getIntent(this));
overridePendingTransition(R.anim.activity_slide_from_bottom, R.anim.activity_stay)
Run Code Online (Sandbox Code Playgroud)

NewActivity完成():

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.activity_stay, R.anim.activity_slide_to_bottom);
}
Run Code Online (Sandbox Code Playgroud)

此外,动画可以在样式中声明

<style name="Animation.MyCustomAnimation" parent="android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/activity_slide_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/activity_stay</item>
    <item name="android:activityCloseEnterAnimation">@anim/activity_stay</item>
    <item name="android:activityCloseExitAnimation">@anim/activity_slide_to_bottom</item>
</style>
Run Code Online (Sandbox Code Playgroud)

在主题中设置此样式:

<style name="Theme.MyAnimTheme" parent="YourThemeParent">
    <item name="android:windowAnimationStyle">@style/Animation.MyCustomAnimation</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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

<activity
    android:name=".NewActivity"
    android:theme="@style/Theme.MyCustomTheme" />
Run Code Online (Sandbox Code Playgroud)

机器人:activityOpenEnterAnimation

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

机器人:activityOpenExitAnimation

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

机器人:activityCloseEnterAnimation

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

机器人:activityCloseExitAnimation

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

机器人: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


Khe*_*raj 5

最好的方法是使用样式,因为如果您希望在所有活动中都使用此动画,则不必在每个活动中都进行编码。

我一直使用的最短路线

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

<application
    android:theme="@style/Theme.SlideAnimWindow"
    ...
    >
Run Code Online (Sandbox Code Playgroud)

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

<activity
    android:name=".YourActivity"
    android:theme="@style/Theme.SlideAnimWindow" />
Run Code Online (Sandbox Code Playgroud)

Slide_from_bottom.xml放入res>anim中。

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="100%p"
    android:toYDelta="0%p" />
Run Code Online (Sandbox Code Playgroud)

Slide_to_bottom.xml放入res>anim中。

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="100%p" />
Run Code Online (Sandbox Code Playgroud)

none.xml放入res>anim中。

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="1000"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />
Run Code Online (Sandbox Code Playgroud)

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

<style name="SlideAnimation" parent="android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/slide_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/none</item>
    <item name="android:activityCloseEnterAnimation">@anim/none</item>
    <item name="android:activityCloseExitAnimation">@anim/slide_to_bottom</item>
</style>

<style name="Theme.SlideAnimWindow" parent="AppTheme">
    <item name="android:windowAnimationStyle">@style/SlideAnimation</item>
</style>
Run Code Online (Sandbox Code Playgroud)

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