Activity的转场动画是通过(int
enterAnim, int exitAnim)实现的。
这个方法是API Level 5 加入的。
这个方法在<code></code> or <code></code>之后被调用,指定接下来的这个转场动画。
方法的第一个参数:enterAnim,是新的Activity的进入动画的resource ID;
第二个参数exitAnim,是旧的Activity(当前的Activity)离开动画的resource ID。
所以这两个参数的对象是两个Activity。
如果上面两个参数没有动画要设置,则用0作为参数。
动画的资源文件放在res\anim\目录下,是View
Animation。
参见本博客博文:
View Animation包含了基本的动画类型,基本可以满足一般转场动画的需要。
根节点可以是:<alpha>, <scale>, <translate>,
<rotate>, interpolator element, 或者是<set>。
利用set可以进行各种嵌套组合。
代码例子:
其中两个动画:
Fragment的转场动画实现分为使用v4包和不使用v4包两种情况,不使用v4包的话,最低API
Level需要是11。
可以给Fragment指定标准的转场动画,通过setTransition(int
transit)方法。
该方法可传入的三个参数是:
TRANSIT_NONE,
TRANSIT_FRAGMENT_OPEN,
TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。
标准动画设置好后,在Fragment添加和移除的时候都会有。
自定义转场动画是通过setCustomAnimations()方法,因为Fragment添加时可以指定加入到Back
Stack中,所以转场动画有添加、移除、从Back stack中pop出来,还有进入四种情况。
注意setCustomAnimations()方法必须在add、remove、replace调用之前被设置,否则不起作用。
类参考:
Fragment:
FragmentTransaction:
不使用v4包的情况下(min API >=11)所对应的动画类型是Property
即动画资源文件需要放在res\animator\目录下,且根标签是<set>,
<objectAnimator>, or <valueAnimator>三者之一。
这一点也可以从Fragment中的这个方法看出:(int
transit, boolean enter, int nextAnim),返回值是。
自定义转场动画时,四个参数的形式setCustomAnimations (int enter, int exit, int
popEnter, int popExit)是API Level
13才有的,11只引入了两个动画的形式,即无法指定Back Stack栈操作时的转场动画。
其中四个动画是从ApiDemos中拿来的:
fragment_slide_left_enter:
fragment_slide_left_exit:
fragment_slide_right_enter:
fragment_slide_right_exit:
Fragment:
使用v4包,Fragment的使用不再局限于API Level
11之上,低等级的API也可以使用,但是这时候转场动画的类型是View
动画资源放在res\anim\路径下,和Activity的转场动画一样。
Fragment中的方法:(int
transit, boolean enter, int nextAnim)返回值。
FragmentTransaction中的setCustomAnimations()方法,两参数类型和四参数类型都可用。
所以一般还是用v4包的这个版本,一是兼容性比较好,另外View Animation其实基本可以满足转场动画的需要。
完整的例子项目:
原文: