android中Activity切换动画学习心得

来源:互联网 发布:淘宝免单网 编辑:程序博客网 时间:2024/06/15 21:17

在开发android应用中,要把界面做的很炫的话肯定少不了动画。默认情况下两个Activity之间切换时就执行了动画,如果你对系统自动的一些动画效果不太满意的话,可以而自定义。Activity切换时需要同时执行两套动画,一个是前一个Activity消失的动画,一个是后一个Activity呈现的动画。

android中实现Activity切换动画有两种方式:

第一种,在Activity中提供了方法overridePendingTransition(int,int)可以实现切换动画,该方法的两个参数分别对应前后两个动画的资源文件。调用overridePendingTransition(int,int)时必须放在startActivity()之后,finish()之前。如果你按back键或只finish(),此方法不起作用。

动画资源文件需要放在res/anim/目录下,下面是分别是test_activity_enter.xml和test_activity_exit.xml

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:shareInterpolator="true"    android:interpolator="@android:anim/linear_interpolator"    android:duration="@android:integer/config_longAnimTime" >        <alpha android:fromAlpha="0" android:toAlpha="1" />    <scale android:fromXScale="0" android:toXScale="1"        android:fromYScale="0" android:toYScale="1" /><translate android:fromXDelta="-100%"     android:toXDelta="0%" /><rotate android:fromDegrees="0" android:toDegrees="360" /></set>


<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"     android:shareInterpolator="true"    android:duration="@android:integer/config_longAnimTime"    android:interpolator="@android:anim/linear_interpolator" >    <alpha android:fromAlpha="1.0" android:toAlpha="0" /><translate android:fromXDelta="0%" android:toXDelta="100%" /><scale android:fromXScale="1" android:toXScale="0"     android:fromYScale="1" android:toYScale="0" /><rotate android:fromDegrees="0" android:toDegrees="-360" /></set>

在Activity里面切换时,调用

Intent intent = new Intent(this,OtherActivity.class);startActivity(intent);overridePendingTransition(R.anim.test_activity_enter, R.anim.test_activity_exit);


第二种,使用animation style,android系统默认就是这么做的,可以打开系统自带的styles.xml,发现很多动画样式,如下:

<!-- Standard animations for a full-screen window or activity. -->    <style name="Animation.Activity">        <item name="activityOpenEnterAnimation">@anim/activity_open_enter</item>        <item name="activityOpenExitAnimation">@anim/activity_open_exit</item>        <item name="activityCloseEnterAnimation">@anim/activity_close_enter</item>        <item name="activityCloseExitAnimation">@anim/activity_close_exit</item>        <item name="taskOpenEnterAnimation">@anim/task_open_enter</item><span style="white-space:pre"></span>…… ……    </style>
最上面四个<item />对应的就是Activity切换时系统调用的动画style了,前两个对应和第一种一样的,后两种是按back键或finish Activity时执行的动画。 如果想办法替换成自己写的样式,就可以实现自定义了,先要定义四套动画,放在res/anim/目录下,这里还是沿用第一种方式的动画文件,为了简单前两种和后两种使用相同动画,然后要在res/values/目录下自定义style(theme),test_style.xml文件如下:

<resources xmlns:android="http://schemas.android.com/apk/res/android">      <style name="TestThemeActivity" mce_bogus="1"><item name="android:windowAnimationStyle">@style/TestAnimationActivity</item><item name="android:windowNoTitle">true</item></style>            <style name="TestAnimationActivity" parent="@android:style/Animation.Activity" mce_bogus="1"><item name="android:activityOpenEnterAnimation">@anim/test_activity_enter</item><item name="android:activityOpenExitAnimation">@anim/test_activity_exit</item><item name="android:activityCloseEnterAnimation">@anim/test_activity_enter</item><item name="android:activityCloseExitAnimation">@anim/test_activity_exit</item></style></resources>
<item />里的name必须要跟系统自带的给出的一模一样,非则编译不能通过。最后就在AndroidManifest.xml清单文件<application>标签里应用上面的样式:

<application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="AnimatorTest"        android:theme="@style/TestThemeActivity"         >

上面设置的是theme属性,在application标签下按CTRL+/也看不到style, 关于style和theme区别,对比themes.xml,感觉好像差不多。

现在该App里所有Activity切换或按back键都可以看到自定义动画样式了。

当第一种方式和第二种方式同时存在时,优先使用第一个。如果你想要某一个Activity有不同的动画效果,就可以使用第一种,即使第二种存在,也会优先使用第一个。









0 0