天天看点

Android Activity和Fragment的转场动画

  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包含了基本的动画类型,基本可以满足一般转场动画的需要。

  根节点可以是:&lt;alpha&gt;, &lt;scale&gt;, &lt;translate&gt;,

&lt;rotate&gt;, interpolator element, 或者是&lt;set&gt;。

  利用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 &gt;=11)所对应的动画类型是Property

  即动画资源文件需要放在res\animator\目录下,且根标签是&lt;set&gt;,

&lt;objectAnimator&gt;, or &lt;valueAnimator&gt;三者之一。

  这一点也可以从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其实基本可以满足转场动画的需要。

  完整的例子项目:

原文: