android - Activity 过渡效果 : slide in for the top activity and scale for the bottom activity

标签 android xml animation

我想实现如下图所示的效果。效果来自Facebook。

effect

我在Activity A中尝试过:

    overridePendingTransition(R.anim.anim_left_to_right, R.anim.scale_out);

Activity B中:

  overridePendingTransition(R.anim.anim_right_to_left, R.anim.scale_in);

xml显示如下:

R.anim.anim_left_to_right

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate android:fromXDelta="100%" 
        android:toXDelta="0%"
        android:fromYDelta="0%" 
        android:toYDelta="0%"
        android:duration="300"/>
</set>

R.anim.anim_right_to_left

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <translate
        android:fromXDelta="0%" android:toXDelta="100%"
        android:fromYDelta="0%" android:toYDelta="0%"
        android:duration="300" />
</set>

R.anim.scale_out

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:toXScale="1.0"
            android:toYScale="1.0"
            android:duration="500"
            android:fillBefore="false" />
</set>

R.anim.scale_in

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:toXScale="0.8"
            android:toYScale="0.8"
            android:duration="500"
            android:fillBefore="false" />
</set>

但是,它没有达到预期的效果 - 出于某种原因,我无法做到这一点。谁能帮我解决这个问题?

最佳答案

Slower Faster

样式:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ....
    <item name="android:windowAnimationStyle">@style/ActivityAnimation</item>
</style>

<style name="ActivityAnimation" parent="@android:style/Animation">
    <item name="android:activityOpenEnterAnimation">@anim/activity_in</item>
    <item name="android:activityOpenExitAnimation">@anim/activity_out</item>
    <item name="android:activityCloseEnterAnimation">@anim/activity_back_in</item>
    <item name="android:activityCloseExitAnimation">@anim/activity_back_out</item>
</style>

activity_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="100%p"
        android:toXDelta="0%p"
        android:duration="@integer/activityAnimationTime">
    </translate>
</set>

activity_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="1.0"
        android:toXScale="0.84"
        android:fromYScale="1.0"
        android:toYScale="0.84"
        android:duration="@integer/activityAnimationTime"/>
    <translate
        android:fromYDelta="0%"
        android:fromXDelta="0%"
        android:toYDelta="8%"
        android:toXDelta="16%"
        android:duration="@integer/activityAnimationTime"/>

    <alpha
        android:fromAlpha="1.0"
        android:toAlpha="0.25"
        android:duration="@integer/activityAnimationTime"/>

</set>

activity_back_in.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <scale
        android:fromXScale="0.84"
        android:toXScale="1.0"
        android:fromYScale="0.84"
        android:toYScale="1.0"
        android:duration="@integer/activityAnimationTime"/>
    <translate
        android:fromYDelta="8%"
        android:fromXDelta="16%"
        android:toYDelta="0%"
        android:toXDelta="0%"
        android:duration="@integer/activityAnimationTime"/>

    <alpha
        android:fromAlpha="0.25"
        android:toAlpha="1.0"
        android:duration="@integer/activityAnimationTime"/>

</set>

activity_back_out.xml:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate
        android:fromXDelta="0%p"
        android:toXDelta="100%p"
        android:duration="@integer/activityAnimationTime">
    </translate>
</set>

关于android - Activity 过渡效果 : slide in for the top activity and scale for the bottom activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36104594/

相关文章:

android - 5 英寸和 4 英寸 Android 设备的不同布局

android - 如何以编程方式在约束布局中添加左右边距

c# - 如何使用 linq to xml 从 xml 中获取数据

javascript - html - 悬停时播放 gif 一次,鼠标移开时反向播放

javascript - 有没有办法知道 'platform'访问网页的硬件资源?

android - 下一个和上一个动画

java - Android CameraUpdateFactory 未初始化

android - 如何将 rust 代码编译并链接到 android apk 打包的应用程序中

python - 如何使用 Python 删除部分 XML 数据并将其写入新文件

xml - Golang HTTP XML 解析问题