前言
目前Android APP在每个Activity打开和退出时有着默认的主题动画,一般情况下是默认的右进右出,有时候我们需要自定义个别Activity的独立打开和关闭动画,本文着重说明实现。
主题样式说明
Activity的默认的进出动画是定义在application
的主题里的,当我们新建立一个工程时,工程会给我们默认配置了一个动画效果,在工程的AndroidManifest.xml
文件的Application配置中,其设置项为android:theme
。
样式的具体配置项可以在theme.xml
文件中进行查看。
设置独立Activity开闭动画
对于单独的Activity而言,如果要更改其出入动画,更新Application的主题显然是不合适的,因为这会对工程内的其他Activity有影响,因此我们只能够采取覆盖的方式进行处理,即我们为Activity单独设置一个新的theme样式,包括有自定义的打开和关闭动画。
1. 动画定义
首先我们需要单独定义一个新的打开关闭动画样式,我们可以在res
的anim
文件夹中定义进出的动画样式:
进入动画bottom_enter.xml
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:fromYDelta="100%p"
android:duration="200"/>
</set>
离开动画bottom_exit.xml
:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:toYDelta="100%p"
android:duration="200"/>
</set>
2. 定义样式
然后接下来需要自定义style
,我们在res/values
文件夹下style.xml
或者theme.xml
文件中定义如下样式:
<style name="bottom_in_out_theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowAnimationStyle">@style/activity_bottom_in_out</item>
</style>
<!--初步设置activity进入和退出的动画-->
<style name="activity_bottom_in_out" parent= "android:Animation.Activity">
<item name="android:activityCloseExitAnimation">@anim/bottom_exit</item>
<item name="android:activityCloseEnterAnimation">@anim/bottom_exit</item>
<item name="android:activityOpenExitAnimation">@anim/bottom_enter</item>
<item name="android:activityOpenEnterAnimation">@anim/bottom_enter</item>
</style>
</resources>
这样我们就成功定义了自定义的Activity出入样式:bottom_in_out_theme
3. Activity配置
在完成了上述style之后,我们还需在AndroidManifest.xml
中对Activity进行配置:
<activity android:name=".TargetActivity"
android:theme="@style/bottom_in_out_theme"/>
经过上述几步,我们就能够成功的为Activity设置了从底部进入退出的动画了。
无动画样式
没有动画的主题样式
<style name="Theme.notAnimation" parent="android:Theme.Light.NoTitleBar.Fullscreen">
<item name="android:windowAnimationStyle">@style/notAnimation</item>
</style>
<style name="notAnimation">
<item name="android:activityOpenEnterAnimation">@null</item>
<item name="android:activityOpenExitAnimation">@null</item>
<item name="android:activityCloseEnterAnimation">@null</item>
<item name="android:activityCloseExitAnimation">@null</item>
<item name="android:taskOpenEnterAnimation">@null</item>
<item name="android:taskOpenExitAnimation">@null</item>
<item name="android:taskCloseEnterAnimation">@null</item>
<item name="android:taskCloseExitAnimation">@null</item>
<item name="android:taskToFrontEnterAnimation">@null</item>
<item name="android:taskToFrontExitAnimation">@null</item>
<item name="android:taskToBackEnterAnimation">@null</item>
<item name="android:taskToBackExitAnimation">@null</item>
</style>
总结
Activity自定义开闭动画。