转载请标明出处.
欢迎关注我的github:https://github.com/YouCii/LearnApp
总结
看网上说的都不太明白, 自己再记录一下.
activity动画常用的设置方式有两种:
- 给activity设置style: 一般用于该activity在所有位置都需要自定义动画的情况;
- 在
startActivity
或者finish
时(之后立即调用)使用overridePendingTransition(int enterAnim, int exitAnim)
: 这种方法试用于特殊情况, 而在其他大多数情况的界面跳转时仍然使用默认方式.
Style属性详解
假设当前的 Activity栈 如下: LastActivity --> AnimActivity --> NextActivity
然后我们给 AnimActivity 设置如下 Style :
<!-- AndroidManifest.xml -->
<activity
android:name="xxx.AnimActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/AnimActivityStyle"/>
<!-- values/style.xml -->
<style name="AnimActivityStyle" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowAnimationStyle">@style/activityAlphaYAnim</item>
</style>
<style name="activityAlphaYAnim" parent="android:Animation">
<!-- 当前activity进入: 新建 -->
<item name="android:activityOpenEnterAnimation">@anim/anim_activity_up</item>
<!-- 当前activity进入: 上一个消失的样式 -->
<item name="android:activityOpenExitAnimation">@anim/anim_activity_silent</item>
<!-- 当前activity进入: 返回 -->
<item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item>
<!-- 当前activity进入: 下一个消失的样式 -->
<item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item>
</style>
这时, 动画是什么样子的呢?
- 当
LastActivity --> AnimActivity
时 ( 创建AnimActivity ) :- LastActivity 隐藏动画执行
activityOpenExitAnimation
- AnimActivity 显示动画执行
activityOpenEnterAnimation
- LastActivity 隐藏动画执行
- 当
NextActivity --> AnimActivity
时 ( 返回AnimActivity时 ):- NextActivity 隐藏动画执行
activityCloseExitAnimation
- AnimActivity 显示动画执行
activityCloseEnterAnimation
- NextActivity 隐藏动画执行
也就是说, 在style中设置的动画只是当前Activity显示时相关页面的执行动画, 而 AnimActivity --> LastActivity
和AnimActivity --> NextActivity
这两种情况不在style生效范围之内.
那么这两种情况应该怎么设置呢, 也是两种办法:
- 也给LastActivity或者NextActivity设置style;
- 使用上面说的
overridePendingTransition(int enterAnim, int exitAnim)
方法
几个常用的动画:
- 自下而上的
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="100%p" android:interpolator="@android:anim/bounce_interpolator" android:toYDelta="0%p"/> </set>
- 自上而下的
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="0%p" android:toYDelta="100%p"/> </set>
- 保持不变(不能简单的设置为null)
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="0" android:toYDelta="0"/> </set>
- 自左到右和自右到左可以使用sdk内部资源:
@android:anim/slide_in_left
和@android:anim/slide_out_right