android 关于activity跳转动画配置属性的解释

转载请标明出处.
欢迎关注我的github:https://github.com/YouCii/LearnApp

总结

看网上说的都不太明白, 自己再记录一下.

activity动画常用的设置方式有两种:

  1. 给activity设置style: 一般用于该activity在所有位置都需要自定义动画的情况;
  2. 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>

这时, 动画是什么样子的呢?

  1. LastActivity --> AnimActivity 时 ( 创建AnimActivity ) :
    • LastActivity 隐藏动画执行 activityOpenExitAnimation
    • AnimActivity 显示动画执行 activityOpenEnterAnimation
  2. NextActivity --> AnimActivity 时 ( 返回AnimActivity时 ):
    • NextActivity 隐藏动画执行 activityCloseExitAnimation
    • AnimActivity 显示动画执行 activityCloseEnterAnimation

也就是说, 在style中设置的动画只是当前Activity显示时相关页面的执行动画, 而 AnimActivity --> LastActivityAnimActivity --> NextActivity这两种情况不在style生效范围之内.

那么这两种情况应该怎么设置呢, 也是两种办法:

  1. 也给LastActivity或者NextActivity设置style;
  2. 使用上面说的overridePendingTransition(int enterAnim, int exitAnim)方法

几个常用的动画:

  1. 自下而上的
    <?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>
    
  2. 自上而下的
    	<?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>
    
  3. 保持不变(不能简单的设置为null)
    	<set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="300"
            android:fromYDelta="0"
            android:toYDelta="0"/>
    </set>
    
  4. 自左到右和自右到左可以使用sdk内部资源: @android:anim/slide_in_left@android:anim/slide_out_right
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值