18.activity切换动画

1年前 阅读 374 评论 1 赞 0

android中设置activity切换动画有 两种实现方式

1 . 在 AndroidManifest.xml 文件activity标签中,通过设置 android:theme 主题属性来自定义我们 Activity的切换动画( 主题可以定义很多属性,动画只是其中之一)。

  1. <activity
  2. android:name="whateverNameActivity"
  3. android:theme="@style/myActivityTheme" >
  4. </activity>

首先要定义自己的主题,打开res/values/styles.xml文件,加入

  1. <style name="myActivityTheme">
  2. <itemname="android:windowAnimationStyle">@style/myAnimTheme />
  3. </style>

然后继续定义具体切换动画样式,分为4种需要动画的情况。

打开新界面时 :

  • 新界面出现(android:activityOpenEnterAnimation)
  • 当前界面消失(android:activityOpenExitAnimation)

返回上一界面时:

  • 当前界面消失(android:activityCloseExitAnimation)
  • 上一界面出现(android:activityCloseEnterAnimation)

a、b、c、d为自定义在res/anim下的具体动画效果文件(下面贴出)

  1. <style name="myAnimTheme " parent="@android:style/Animation.Activity">
  2. <item name="android:activityOpenEnterAnimation">@anim/a />
  3. <item name="android:activityOpenExitAnimation">@anim/b />
  4. <item name="android:activityCloseEnterAnimation">@anim/c />
  5. <item name="android:activityCloseExitAnimation">@anim/d />
  6. </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:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:interpolator="@android:anim/decelerate_interpolator">
  4. <scale android:fromXScale="0.1"
  5. android:toXScale="1.0"
  6. android:fromYScale="0.1"
  7. android:toYScale="1.0"
  8. android:pivotX="50%p"
  9. android:pivotY="50%p"
  10. android:duration="300" />
  11. <alpha
  12. android:fromAlpha="0.1"
  13. android:toAlpha="1.0"
  14. android:duration="300" />
  15. </set>

zoomout.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:interpolator="@android:anim/decelerate_interpolator"
  4. android:zAdjustment="top">
  5. <scale android:fromXScale="1.0"
  6. android:toXScale=".5"
  7. android:fromYScale="1.0"
  8. android:toYScale=".5"
  9. android:pivotX="50%p"
  10. android:pivotY="50%p"
  11. android:duration="300" />
  12. <alpha android:fromAlpha="1.0"
  13. android:toAlpha="0"
  14. android:duration="300"/>
  15. </set>

out_from_right.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <translate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="500"
  4. android:fromXDelta="0"
  5. android:fromYDelta="0"
  6. android:toXDelta="100%p"
  7. android:toYDelta="0" >
  8. </translate>

in_from_left.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <translate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="500"
  4. android:fromXDelta="-100%p"
  5. android:fromYDelta="0"
  6. android:toXDelta="0"
  7. android:toYDelta="0" >
  8. </translate>

out_from_left.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <translate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="500"
  4. android:fromXDelta="0"
  5. android:fromYDelta="0"
  6. android:toXDelta="-100%p"
  7. android:toYDelta="0" >
  8. </translate>

in_from_right.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <translate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:duration="500"
  4. android:fromXDelta="100%p"
  5. android:fromYDelta="0"
  6. android:toXDelta="0"
  7. android:toYDelta="0" >
  8. </translate>

fade.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <alpha xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:interpolator="@android:anim/accelerate_interpolator"
  4. android:fromAlpha="0.0" android:toAlpha="1.0"
  5. android:duration="2000" />

hold.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <translate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:interpolator="@android:anim/accelerate_interpolator"
  4. android:fromXDelta="0" android:toXDelta="0"
  5. android:duration="2000" />

hyperspace_in.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <alpha xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:fromAlpha="0.0"
  4. android:toAlpha="1.0"
  5. android:duration="2000"
  6. android:startOffset="1200" />

hyperspace_out.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:shareInterpolator="false">
  4. <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  5. android:fromXScale="1.0"
  6. android:fromYScale="1.0"
  7. android:toYScale="0.6"
  8. android:pivotX="50%"
  9. android:pivotY="50%"
  10. android:duration="2000" />
  11. <set android:interpolator="@android:anim/accelerate_interpolator"
  12. android:startOffset="700">
  13. <scale android:fromXScale="1.4"
  14. android:toXScale="0.0"
  15. android:toYScale="0.0"
  16. android:pivotX="50%"
  17. android:pivotY="50%"
  18. android:duration="2000" />
  19. <rotate android:fromDegrees="0"
  20. android:toDegrees="-45"
  21. android:pivotX="50%"
  22. android:pivotY="50%"
  23. android:duration="2000" />
  24. </set>
  25. </set>

alpha_action.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android" >
  3. <alpha android:fromAlpha="1.0"
  4. android:toAlpha="0"
  5. android:duration="2000"/>
  6. <!-- 透明度控制动画效果 alpha
  7. 0.0表示完全透明
  8. 1.0表示完全不透明
  9. 以上值取0.0-1.0之间的float数据类型的数字
  10. -->
  11. </set>

scale_action.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android">
  3. <scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  4. android:fromXScale="0.0"
  5. android:toXScale="1.4"
  6. android:fromYScale="0.0"
  7. android:toYScale="1.4"
  8. android:pivotX="50%"
  9. android:pivotY="50%"
  10. android:fillAfter="false"
  11. android:duration="2000" />
  12. </set>

scale_rotate.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- android:duration="@android:integer/config_mediumAnimTime" -->
  3. <set xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shareInterpolator="false">
  5. <scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
  6. android:fromXScale="0.0"
  7. android:toXScale="1.0"
  8. android:fromYScale="0.0"
  9. android:toYScale="1.0"
  10. android:pivotX="50%"
  11. android:pivotY="50%"
  12. android:duration="2000"
  13. android:repeatCount="0"
  14. android:startOffset="20"></scale>
  15. <rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  16. android:fromDegrees="0"
  17. android:toDegrees="+355"
  18. android:pivotX="50%"
  19. android:pivotY="50%"
  20. android:duration="2000" />
  21. </set>

scale_translate.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- android:duration="@android:integer/config_mediumAnimTime" -->
  3. <set xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shareInterpolator="false">
  5. <scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
  6. android:fromXScale="0.0"
  7. android:toXScale="1.0"
  8. android:fromYScale="0.0"
  9. android:toYScale="1.0"
  10. android:pivotX="0"
  11. android:pivotY="0"
  12. android:duration="2000"
  13. android:repeatCount="0"
  14. android:startOffset="0"></scale>
  15. <translate android:fromXDelta="0"
  16. android:toXDelta="0"
  17. android:fromYDelta="0"
  18. android:toYDelta="0"
  19. android:duration="2000" />
  20. </set>

scale_translate_rotate.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- android:duration="@android:integer/config_mediumAnimTime" -->
  3. <set xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:shareInterpolator="false">
  5. <scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
  6. android:fromXScale="0.0"
  7. android:toXScale="1.0"
  8. android:fromYScale="0.0"
  9. android:toYScale="1.0"
  10. android:pivotX="50%"
  11. android:pivotY="50%"
  12. android:duration="2000"></scale>
  13. <translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  14. android:fromXDelta="120"
  15. android:toXDelta="30"
  16. android:fromYDelta="30"
  17. android:toYDelta="250"
  18. android:duration="2000" />
  19. <rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
  20. android:fromDegrees="0"
  21. android:toDegrees="+355"
  22. android:pivotX="50%"
  23. android:pivotY="50%"
  24. android:duration="2000" />
  25. </set>

slide_down_out.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <set android:interpolator="@android:anim/accelerate_interpolator"
  3. xmlns:android="http://schemas.android.com/apk/res/android">
  4. <translate android:duration="2000"
  5. android:fromYDelta="0.0"
  6. android:toYDelta="100.0%p" />
  7. </set>

wave_scale.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <set xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:interpolator="@android:anim/accelerate_interpolator">
  4. <alpha android:fromAlpha="0.0"
  5. android:toAlpha="1.0"
  6. android:duration="2000" />
  7. <scale android:fromXScale="0.5"
  8. android:toXScale="1.5"
  9. android:fromYScale="0.5"
  10. android:toYScale="1.5"
  11. android:pivotX="50%"
  12. android:pivotY="50%"
  13. android:duration="2000" />
  14. <scale android:fromXScale="1.5"
  15. android:toXScale="1.0"
  16. android:fromYScale="1.5"
  17. android:toYScale="1.0"
  18. android:pivotX="50%"
  19. android:pivotY="50%"
  20. android:startOffset="200"
  21. android:duration="2000" />
  22. </set>
你的支持将鼓励作者继续创作

评论(1)

高薪寻找会制作安卓上架高手 主打360 豌豆荚 小米 应用宝 华为平台

有技术的请立即 寇 寇 详谈949 181 609

9个月前