android中设置activity切换动画有 两种实现方式
1 . 在 AndroidManifest.xml 文件activity标签中,通过设置 android:theme 主题属性来自定义我们 Activity的切换动画( 主题可以定义很多属性,动画只是其中之一)。
<activity
android:name="whateverNameActivity"
android:theme="@style/myActivityTheme" >
</activity>
首先要定义自己的主题,打开res/values/styles.xml文件,加入
<style name="myActivityTheme">
<itemname="android:windowAnimationStyle">@style/myAnimTheme />
</style>
然后继续定义具体切换动画样式,分为4种需要动画的情况。
打开新界面时 :
- 新界面出现(android:activityOpenEnterAnimation)
- 当前界面消失(android:activityOpenExitAnimation)
返回上一界面时:
- 当前界面消失(android:activityCloseExitAnimation)
- 上一界面出现(android:activityCloseEnterAnimation)
a、b、c、d为自定义在res/anim下的具体动画效果文件(下面贴出)
<style name="myAnimTheme " parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/a />
<item name="android:activityOpenExitAnimation">@anim/b />
<item name="android:activityCloseEnterAnimation">@anim/c />
<item name="android:activityCloseExitAnimation">@anim/d />
</style>
2 . 在Android的2.0版本之后,加入了overridePendingTransition()这个函数来帮我们实现activity切换动画,它在startActivity()或者finish()函数之后调用
它有两个参数, enterAnim是下一界面进入效果的xml文件的id, exitAnim是当前界面退出效果的xml文件id。
我们可以看出它也实现了第一种方式的四种动画情况。
注意:
- 当我们不想要动画时,设置为 0 即可。
- 我们可以看出这个方法是定义在android.app.Activity下的,如果我们用自定义的view或fragment等嵌入到Activity中,调用这个函数时很可能不起作用。一般改写为this.getParent().overridePendingTransition 就可以解决。
3 .上 res/anim 下的各种动画文件
zoomin.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator">
<scale android:fromXScale="0.1"
android:toXScale="1.0"
android:fromYScale="0.1"
android:toYScale="1.0"
android:pivotX="50%p"
android:pivotY="50%p"
android:duration="300" />
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="300" />
</set>
zoomout.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/decelerate_interpolator"
android:zAdjustment="top">
<scale android:fromXScale="1.0"
android:toXScale=".5"
android:fromYScale="1.0"
android:toYScale=".5"
android:pivotX="50%p"
android:pivotY="50%p"
android:duration="300" />
<alpha android:fromAlpha="1.0"
android:toAlpha="0"
android:duration="300"/>
</set>
out_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100%p"
android:toYDelta="0" >
</translate>
in_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="-100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
out_from_left.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="-100%p"
android:toYDelta="0" >
</translate>
in_from_right.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="500"
android:fromXDelta="100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:toYDelta="0" >
</translate>
fade.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="2000" />
hold.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator"
android:fromXDelta="0" android:toXDelta="0"
android:duration="2000" />
hyperspace_in.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="2000"
android:startOffset="1200" />
hyperspace_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="1.0"
android:fromYScale="1.0"
android:toYScale="0.6"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000" />
<set android:interpolator="@android:anim/accelerate_interpolator"
android:startOffset="700">
<scale android:fromXScale="1.4"
android:toXScale="0.0"
android:toYScale="0.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000" />
<rotate android:fromDegrees="0"
android:toDegrees="-45"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000" />
</set>
</set>
alpha_action.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha android:fromAlpha="1.0"
android:toAlpha="0"
android:duration="2000"/>
<!-- 透明度控制动画效果 alpha
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之间的float数据类型的数字
-->
</set>
scale_action.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.4"
android:fromYScale="0.0"
android:toYScale="1.4"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="2000" />
</set>
scale_rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"
android:repeatCount="0"
android:startOffset="20"></scale>
<rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+355"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000" />
</set>
scale_translate.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="0"
android:pivotY="0"
android:duration="2000"
android:repeatCount="0"
android:startOffset="0"></scale>
<translate android:fromXDelta="0"
android:toXDelta="0"
android:fromYDelta="0"
android:toYDelta="0"
android:duration="2000" />
</set>
scale_translate_rotate.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false">
<scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.0"
android:fromYScale="0.0"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000"></scale>
<translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXDelta="120"
android:toXDelta="30"
android:fromYDelta="30"
android:toYDelta="250"
android:duration="2000" />
<rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+355"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000" />
</set>
slide_down_out.xml
<?xml version="1.0" encoding="UTF-8"?>
<set android:interpolator="@android:anim/accelerate_interpolator"
xmlns:android="http://schemas.android.com/apk/res/android">
<translate android:duration="2000"
android:fromYDelta="0.0"
android:toYDelta="100.0%p" />
</set>
wave_scale.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<alpha android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="2000" />
<scale android:fromXScale="0.5"
android:toXScale="1.5"
android:fromYScale="0.5"
android:toYScale="1.5"
android:pivotX="50%"
android:pivotY="50%"
android:duration="2000" />
<scale android:fromXScale="1.5"
android:toXScale="1.0"
android:fromYScale="1.5"
android:toYScale="1.0"
android:pivotX="50%"
android:pivotY="50%"
android:startOffset="200"
android:duration="2000" />
</set>