android Activity 右进右出动画

效果
新进入的页面从右边滑入,当前页面从左边滑出,按下返回键的时候,当前页面从右边滑出,前一个页面从左边滑入。

方法:给Activity设置主题

步骤一:写动画文件
res/anim/slide_in_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:duration="300"/>
</set>

res/anim/slide_in_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:duration="300"/>
	<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
            android:duration="300" />
</set>

res/anim/slide_out_left.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:duration="300"/>
	<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
            android:duration="300" />
</set>

res/anim/slide_out_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:duration="300"/>
	<alpha android:fromAlpha="1.0" android:toAlpha="1.0"
            android:duration="300" />
</set>


步骤二:定义style
res/values/styles.xml  文件中加入以下代码
    <!-- Add by fycus_peng -->
    <style name="RightInRightOutAnim" parent="@android:style/Animation.Activity">
        <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item>
        <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item>
        
        <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item>
        <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item>
    </style>
    
    
    <style name="Animation_RightInRightOutActivity" parent="android:Theme.Light">
        <item name="android:windowAnimationStyle">@style/RightInRightOutAnim</item>
    </style>


步骤三:AndroidManifest.xml 中对应的Activity的android:theme属性
        <activity
            android:name="com.fycus.activityanimationtest.TestActivity"
            android:theme="@style/Animation_RightInRightOutActivity"
            android:label="@string/app_name" >
        </activity>


对style中的Animation参数的理解:

先假设ActivityTest设置了这个动画的style:
这里的“EnterAnimation”的作用对象是ActivityTest,而“ExitAnimation”的作用对象是其他Activity
这里的“Open”是指ActivityTest的打开状态,“Close”是指其他Activity的状态。

所以就有下面的理解:
“OpenEnterAnimation”  可以理解为当ActivityTest要Open时 ActivityTest的Enter动画(某个Activity start ActivityTest,ActivityTest进入的动画)
“CloseEnterAnimation”  可以理解为当其他Activity要Close时,ActivityTest的Enter动画(某个Activity finish退出,ActivityTest进入的动画)

“OpenExitAnimation”   可以理解为当ActivityTest要Open时, 其他Activity Exit的动画 (某个Activity start ActivityTest,这个Activity退出的动画)
“CloseExitAnimation”  可以理解为当其他Activity要Close时,其他Activity退出的动画(某个Activity finish退出切换到ActivityTest,这个Activity退出的动画)


总结:
一个Activity可以指定自己进入时自己的Animation和别的Activity退出时的Animation。 而自己退出的Animation是由其他Activity指定的。
这里所说的 “当前Activity进入”分为两种不同的情况,一种是A start B, B Activity 进入;另一种是 C finish(), B 出栈。
所以两种情况,每种情况都对应一个入动画和出动画,一共是四种。



所犯错误:
1. 在Activity中调用setTheme(R.style.other_style)方法,导致我在AndroidManifest中的android:theme被覆盖。
2. 将Activity设置成Dialog类型,  RightInRightOutAnim 没有效果,解决方法是将  RightInRightOutAnim 的parent改为 "@android:style/Animation.Dialog"


其他:
下面这段代码也可以设置动画style
<style name="Animation_Activity_RightInRightOut1" mce_bogus="1" parent="@android:style/Animation.Activity">
        <item name="android:windowEnterAnimation">@anim/slide_in_right</item>
        <item name="android:windowExitAnimation">@anim/slide_out_right</item>

        <item name="android:windowHideAnimation">@anim/slide_out_left</item>
        <item name="android:windowShowAnimation">@anim/slide_in_left</item>
</style>

android:windowEnterAnimation   就是指Activity进入时的动画
android:windowExitAnimation      就是指Activity退出的动画
android:windowShowAnimation  当其他app切换到这个Activity时会显示这个动画
android:windowHideAnimation   不知道,烦请赐教

这是设置window animation的属性,和设置Activity animation的属性还是有区别的,一个是Window的动画, 一个是Activity的动画。 也可以把这里的windowAnimation加入上面写的style中,或许就能感觉到区别了。


源码  http://download.csdn.net/detail/u010366911/7354563

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值