我想为不同的活动定义两种窗口动画样式。
这是我到目前为止所拥有的:
清单:
<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
。
有任何提示吗?
答案 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);
}
答案 1 :(得分:1)
尝试更改对话框动画的父级
<style name="CustomDialogAnimation" parent="@style/Animation.AppCompat.Dialog"