示例代码、思维导图可在此下载
https://github.com/jzj1993/AndroidAnimation
Dialog View Animation
给Dialog中的View设置动画,和给普通View设置动画的写法一样。
-
Animation anim = AnimationUtils.loadAnimation(this, R.anim.animation);
-
View dialogLayout = LayoutInflater.from(this).inflate(R.layout.dialog, null);
-
View v = dialogLayout.findViewById(R.id.dialog_text);
-
v.startAnimation(anim);
-
new AlertDialog.Builder(this).setView(dialogLayout).show();
Dialog Window Animation
给整个Dialog设置动画(即Window对象)
-
<style name="dialogAnimation" parent="@android:style/Animation.Dialog">
-
<item name="android:windowEnterAnimation">@anim/anim_in</item>
-
<item name="android:windowExitAnimation">@anim/anim_out</item>
-
</style>
-
Dialog dialog = new AlertDialog.Builder(this)
-
.setMessage("Message")
-
.setPositiveButton("OK", null)
-
.create();
-
dialog.getWindow().setWindowAnimations(R.style.dialogAnimation);
-
dialog.show();
PopupWindow Animation
XML中的定义和Dialog相同
<style name="dialogAnimation" parent="@android:style/Animation.Dialog">
<item name="android:windowEnterAnimation">@anim/anim_in</item>
<item name="android:windowExitAnimation">@anim/anim_out</item>
</style>
Java代码中设置动画
mPopupWindow.setAnimationStyle(R.style.dialogAnimation);
Activity Animation From XML
给Activity页面跳转设置动画
-
<!-- 1.定义Activity动画 -->
-
<style name="activityAnimation" parent="@android:style/Animation.Activity">
-
<item name="android:windowEnterAnimation">@null</item>
-
<item name="android:windowExitAnimation">@null</item>
-
<!-- 新Activity启动时,Enter动画 -->
-
<item name="android:activityOpenEnterAnimation">@anim/anim_in</item>
-
<!-- 新Activity启动时,原有Activity的Exit动画 -->
-
<item name="android:activityOpenExitAnimation">@anim/stay</item>
-
<!-- 新Activity退出时,原有Activity的Enter动画 -->
-
<item name="android:activityCloseEnterAnimation">@anim/stay</item>
-
<!-- 新Activity退出时,Exit动画 -->
-
<item name="android:activityCloseExitAnimation">@anim/anim_out</item>
-
</style>
-
<!-- 2. AppTheme中引用Activity动画 -->
-
<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar">
-
<item name="android:windowAnimationStyle">@style/activityAnimation</item>
-
</style>
-
<!-- 3. Manifest中的Application或Activity标签中,指定theme为AppTheme -->
-
<application
-
android:theme="@style/AppTheme">
注意:
- 如果Activity的launchMode设置为SingleInstance,可能会导致动画失效
- 部分手机需要在设置中开启显示全部动画。
- 某些手机由于定制了ROM,通过XML自定义Activity切换动画无效,只能用Java实现。
Activity Animation From Java
startActivity(new Intent(this, NewActivity.class));
overridePendingTransition(R.anim.anim_in, R.anim.anim_out); // 设置为0则表示没有动画
在部分机型中,设置为0表示不显示动画可能没效果,可以定义一个没有实际执行效果的动画代替:
res/anim/stay.xml
<?xml version="1.0" encoding="utf-8"?>
<alpha
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="1000"
android:fromAlpha="1.0"
android:toAlpha="1.0" />