Dialog切换动画的设置
设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给它就可以了。
下面看看这个animation应该怎么写,窗口进入和退出的效果分别是通过@android:windowEnterAnimation和@android:windowExitAnimation两个item设定的,比如进入时的anim是@anim/dialog_enter, 退出的是@anim/dialog_exit, 则声明一个style为:
<style name="mydialog">
<item name="@Android:windowEnterAnimation">@anim/dialog_enter</item>
<item name="@android:windowExitAnimation">@anim/dialog_exit</item>
</style>
然后把这个style的id传给lp.windowAnimations就行了。
Activity切换动画的设置
设置Activity的切换动画,有三种方式:
1.使用overridePendingTransition(新Activity进入动画, 旧Activity退出动画),需要紧接在startActivity 和finish()后。
2.在manifest中配置Activity的theme。
<style name="ThemeActivity" parent="AppBaseTheme">
<item name="android:windowAnimationStyle">@style/activityAnimatStyle</item>
</style>
<style name="activityAnimatStyle" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/animate_right_in</item>
<item name="android:activityOpenExitAnimation">@anim/animate_old_aphla</item>
<item name="android:activityCloseExitAnimation">@anim/animate_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/animate_old_aphla</item>
</style>
3、通过Acitvity获取它的window, 然后和设置dialog一样进行设置,因为归根到底是设置Window的layoutparams里的windowAnimations值。所以Activity的进入和退出效果也可以通过@android:windowEnterAnimation和@android:windowExitAnimation这两个item设定。
需要说明的是在项目中WindowAnimation优先级大于Activity,即在Activity转场过程中,如果同时设置了WindowAnimation和ActivityAnimation,那么很可能只会执行WindowAnimation。
Fragment切换动画的设置
Fragment的设置需要在transaction.add 或transaction.remove之前。
Fragment有两种方式,一种android提供了标准方法,一种自定义动画
1、 Fragment指定标准的转场动画,通过setTransition(int transit)方法
//淡入淡出的默认动画
transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
还可以传入的参数
该方法可传入的三个参数是:
TRANSIT_NONE,
TRANSIT_FRAGMENT_OPEN,
TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。
标准动画设置好后,在Fragment添加和移除的时候都会有。
2、自定义转场动画
setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back Stack中,所以转场动画有添加、移除、从Back stack中pop出来,还有进入四种情况。
setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作用。
//设置自定义过场动画
transaction.setCustomAnimations(
R.anim.enter_push_left_in,
R.anim.exit_push_left_out,
R.anim.popEnter_push_left_in,
R.anim.popExit_push_left_out);
参考文章:
Activity 设置切换动画