不同的退出/进入动画

时间:2018-08-21 13:54:03

标签: android animation

我想为不同的活动定义两种窗口动画样式。

这是我到目前为止所拥有的:

清单:

<application
    ...>
    <activity
        android:name=".MainActivity"
        android:screenOrientation="portrait"
        android:theme="@style/A" />
    <activity
        android:name=".SecondActivity"
        android:screenOrientation="portrait"
        android:theme="@style/B" />
</application>

Styles.xml:

<style name="A" parent="AppTheme">
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item>
</style>

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/bottom_in</item>
    <item name="android:activityOpenExitAnimation">@anim/scale_out</item>
    <item name="android:activityCloseEnterAnimation">@anim/scale_in</item>
    <item name="android:activityCloseExitAnimation">@anim/bottom_out</item>
</style>


<style name="B" parent="@style/Theme.AppCompat.Light.Dialog">
    <item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item>
</style>

<style name="CustomDialogAnimation" parent="@android:style/Animation.Dialog">
   <item name="android:windowEnterAnimation">@anim/dialog_in</item>
   <item name="android:windowExitAnimation">@anim/dialog_out</item>
</style>

我想要实现的是:

样式为A的活动之间的过渡应使用CustomActivityAnimation中定义的动画。

样式为B的活动被设置为对话框样式,并且应该在CustomDialogAnimation中定义其他过渡动画。

我的问题:

关闭样式android:windowExitAnimation中的活动时,从未使用样式CustomDialogAnimation中的B。而是播放样式android:activityCloseExitAnimation中的CustomActivityAnimation

有任何提示吗?

2 个答案:

答案 0 :(得分:2)

出于您的目的,您可以在运行时为其提供以下内容:

我们总共需要四个动画,我们将通过XML对其进行定义。在这四个动画中,实际上有两组。第一种是将视图从其当前位置移至看不见的位置,第二种是将视图从视图中移出。

定义动画XML文件:

  

slide_to_left.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android">
    <translate android:fromXDelta="0" android:toXDelta="-100%p"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="300"/>
</set>
  

slide_to_right.xml:

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

slide_from_left.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"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="300"/> 

  

slide_from_right.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"
               android:interpolator="@android:anim/accelerate_decelerate_interpolator"
               android:duration="300"/>
</set>
  

为活动之间的过渡设置动画非常容易。的   活动类为我们提供了一种称为   OverridePendingTransition,可用于设置动画的   退出并进入“活动”,如下所示:

Intent intent = new Intent(this, B.class);
startActivity(intent);
overridePendingTransition(R.anim.slide_from_right, R.anim.slide_to_left);

使用我们之前定义的动画,我们可以从视图的右侧插入新的“活动”幻灯片,而将当前的“活动”幻灯片从视图的左侧移出。

  

同样,当新的活动完成时,我们可以执行   反向动画以使完成的活动幻灯片不可见   右侧,然后上一个活动从   左:

finish();
overridePendingTransition(R.anim.slide_from_left, R.anim.slide_to_right);
  

处理后退按钮:

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

credit

答案 1 :(得分:1)

尝试更改对话框动画的父级 <style name="CustomDialogAnimation" parent="@style/Animation.AppCompat.Dialog"