Android ApiDemo学习(四)Views——7 Layout Animation


共有7个例子。

  • grid fade

效果:网格中的item从上到下、从左至右,依次从暗到亮显示出来。

代码:布局xml文件中,定义了gridview的animation属性为layout_grid_fade。上面的所有动画效果都是通过这句话添加上去的。这个属性定义了viewgroup第一次加载上去的动画,注意,这个动画是整个layout的动画。即整个gridview的动画。而不是单个item的动画。那单个item的动画效果在哪里呢?我们看这个layout_grid_fade.xml:

layout_grid_fade.xml中定义了三个属性:

  1. rowDelay:行延迟时间比率
  2. directionPriority:行优先还是列优先。比如这里定义这个属性值为column,那么列优先。
  3. animation:这个animation就是grid里单个item的动画了。这里定义为fade。

fade.xml为grid的每个cell定义动画,我们看这个文件:

  1. alpha:表示这个动画实现的是透明度的改变。即cell的明暗变化
  2. interpolator:插值器。即变化的加速或减速。这里定义为加速显示
  3. fromAppha toAlpha:起始透明度和结束透明度。动画的开头和结束两个关键帧
  4. duration:动画持续的时间
  • list cascade

效果:listview中item从上到下依次展开。

代码:看java代码,LayoutAnimation使用LayoutAnimationController来定义一个Viewgroup里item的动画,比如本例中listview的item。在这个LayoutAnimationController中添加了两个动画,一个是AlphaAnimation,透明度从0到1;另一个是TranslateAnimation,y方向上从-1到1。可以改变duration设置其时间长一些来看到效果。

从本例和上例的比较:layout animation有两种animation,第一种是整个viewgroup的animation,在viewgroup的布局文件中使用layoutAnimition属性定义,定义layout内部item的动画之间的延迟时间、优先级和item动画id等;第二种是单个item的animation,可以在viewgroup的动画xml文件中使用animation属性定义,或者在java代码中使用LayoutAnimationController,定义单个item的动画效果。

  • reverse order

本例显示listview的item倒序显示。和第一个例子类似。先使用layoutAnimation定义整个listview的动画定义文件为layout_bottem_to_top_slide.xml。在这个xml文件中,定义了单个item的animation为slide_right。关键句是animationOrder属性,这个属性可以定义为normal正序、reverse倒序、random随机。

  • randomize

与上例一样示范item动画的显示顺序。上例是listview倒序,本例为gridview随机顺序。

  • grid direction

与第一例类似,区别是:定义layoutAnimation时,定义为行优先。且增加direction属性为从下向上、从右到左。

  • wave scale

看定义单个item动画的wave_scale文件:三个动画效果放一起,分别是alpha、scale、scale。

alpha:透明度从0到1

scale1:从0.5倍放大到1.5倍

scale2:从1.5被缩小为正常1倍

  • nested animation

先看整个例子的布局文件layout_animation.xml,定义table中的四行的layoutAnimation分贝为layout_animation_row_right_slide和layout_animation_row_right_slide. 注意,TalbeLayout是一个groupview,而TableLayout的子标签TableRow也是groupview,因此可以单独对TableRow定义LayoutAnimation。

layout_animation_row_left_slide:定义单个item动画为slide_left

layout_animation_row_right_slide:定义单个item动画为slide_right

 

这7个例子,都是view下的layoutanimation,可以看到animation下也有layoutanimation。这是两种不同的animation。读者可自行比较一下,最后animation会总结这两种layoutanimation的区别。