Android Animation完全总结(四)其他

示例代码、思维导图可在此下载
https://github.com/jzj1993/AndroidAnimation

Dialog View Animation

给Dialog中的View设置动画,和给普通View设置动画的写法一样。

  1. Animation anim = AnimationUtils.loadAnimation(this, R.anim.animation);

  2. View dialogLayout = LayoutInflater.from(this).inflate(R.layout.dialog, null);

  3. View v = dialogLayout.findViewById(R.id.dialog_text);

  4. v.startAnimation(anim);

  5. new AlertDialog.Builder(this).setView(dialogLayout).show();

Dialog Window Animation

给整个Dialog设置动画(即Window对象)

  1. <style name="dialogAnimation" parent="@android:style/Animation.Dialog">

  2. <item name="android:windowEnterAnimation">@anim/anim_in</item>

  3. <item name="android:windowExitAnimation">@anim/anim_out</item>

  4. </style>

  5. Dialog dialog = new AlertDialog.Builder(this)

  6. .setMessage("Message")

  7. .setPositiveButton("OK", null)

  8. .create();

  9. dialog.getWindow().setWindowAnimations(R.style.dialogAnimation);

  10. dialog.show();

XML中的定义和Dialog相同

  1. <style name="dialogAnimation" parent="@android:style/Animation.Dialog">
  2. <item name="android:windowEnterAnimation">@anim/anim_in</item>
  3. <item name="android:windowExitAnimation">@anim/anim_out</item>
  4. </style>

Java代码中设置动画

  1. mPopupWindow.setAnimationStyle(R.style.dialogAnimation);

Activity Animation From XML

给Activity页面跳转设置动画

  1. <!-- 1.定义Activity动画 -->

  2. <style name="activityAnimation" parent="@android:style/Animation.Activity">

  3. <item name="android:windowEnterAnimation">@null</item>

  4. <item name="android:windowExitAnimation">@null</item>

  5. <!-- 新Activity启动时,Enter动画 -->

  6. <item name="android:activityOpenEnterAnimation">@anim/anim_in</item>

  7. <!-- 新Activity启动时,原有Activity的Exit动画 -->

  8. <item name="android:activityOpenExitAnimation">@anim/stay</item>

  9. <!-- 新Activity退出时,原有Activity的Enter动画 -->

  10. <item name="android:activityCloseEnterAnimation">@anim/stay</item>

  11. <!-- 新Activity退出时,Exit动画 -->

  12. <item name="android:activityCloseExitAnimation">@anim/anim_out</item>

  13. </style>

  14. <!-- 2. AppTheme中引用Activity动画 -->

  15. <style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">

  16. <item name="android:windowAnimationStyle">@style/activityAnimation</item>

  17. </style>

  18. <!-- 3. Manifest中的Application或Activity标签中,指定theme为AppTheme -->

  19. <application

  20. android:theme="@style/AppTheme">

注意:

  • 如果Activity的launchMode设置为SingleInstance,可能会导致动画失效
  • 部分手机需要在设置中开启显示全部动画。
  • 某些手机由于定制了ROM,通过XML自定义Activity切换动画无效,只能用Java实现。

Activity Animation From Java

  1. startActivity(new Intent(this, NewActivity.class));
  2. overridePendingTransition(R.anim.anim_in, R.anim.anim_out); // 设置为0则表示没有动画

在部分机型中,设置为0表示不显示动画可能没效果,可以定义一个没有实际执行效果的动画代替:
res/anim/stay.xml

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