【问题标题】:Activity transition effects: slide in for the top activity and scale for the bottom activity活动过渡效果:顶部活动滑入,底部活动缩放
【发布时间】:2016-03-24 21:08:15
【问题描述】:

我想达到下面显示的效果。效果来自 Facebook。

我在 Activity A 中尝试过这个:

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

活动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>

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

【问题讨论】:

    标签: android xml animation


    【解决方案1】:

    样式:

    <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>
    

    【讨论】:

    • 谢谢尼古拉。它实际上正在工作 - 我只是将您的课程放入一个测试应用程序中,它似乎工作正常。我有另一个关于这个问题的主题的问题,你能帮我吗? stackoverflow.com/questions/36207321/…
    • 我不确定是否可以通过半透明活动获得这种动画,因为如果将“windowIsTranslucent”设置为 true,则只能提供“windowEnterAnimation”和“windowExitAnimation”。请看gist.github.com/lassana/136cd637dafe872cc0f3
    猜你喜欢
    • 2018-09-09
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多