天天看点

Hack6-为ViewGroup添加动画效果6.1 总结6.2 相关链接

在默认的情况之下,当你给一个ViewGroup添加一个View的时候,他们是立即就被显示出来的,其实实现它们的的动画效果非常简单。在这个Hack里面,我就会给你展示如何在给ViewGroup添加View的时候加上一个动画效果,在你的程序里面,只需要短短的几行代码就够了。

Android提供了一个叫做LayoutAnimationController的类,这个类对于给ViewGroup的child添加动画效果时很有用。需要提醒的很重要的一点是,你不能给你的children提供不同的动画效果,但是你可以利用LayoutAnimationController控制每一个child何时开始动画。

理解LayoutAnimationController的最简单的方法就是通过一个例子了。我们将会给listview中的每一行添加两种效果的混合动画,alpha(渐变)与translate(位移)。我们可以通过两种方式使用layoutAnimationController:一是在代码中使用、二是在XML文件中使用。在这里将会演示如何在代码中实现它,在XML中实现就靠你自己了。来看看实现动画部分的代码吧:

//获取ListView
	mListView = (ListView) findViewById(R.id.my_listview_id);
	//创建AnimationSet并使用默认配置
	AnimationSet set = new AnimationSet(true);
	//创建一个渐变动画
	Animation animation = new AlphaAnimation(0.0f, 1.0f);
	animation.setDuration(50);
	set.addAnimation(animation);//添加动画
	//创建一个位移动画
	animation = new TranslateAnimation(Animation.RELATIVE_TO_SELF, 0.0f,
						Animation.RELATIVE_TO_SELF, 0.0f, Animation.RELATIVE_TO_SELF,
						-1.0f, Animation.RELATIVE_TO_SELF, 0.0f);
	animation.setDuration(100);
	set.addAnimation(animation);//添加动画
	//创建LayoutAnimationController,并设置动画之间的延迟
	LayoutAnimationController controller = new LayoutAnimationController(
						set, 0.5f);
	//启动动画
	mListView.setLayoutAnimation(controller);
           

下面讲解一下:

1、首先你需要获取ListView。

2、由于我们需要添加不止一个动画效果,所以我们需要用一个集合(AnimationSet)。

3、这个布尔变量将会决定是否我们的每一个动画都会使用一个interpolator(插入器)。在这个例子里面,我们使用默认的interpolator(插入器)来设置渐变及位移效果,并把他们加入AnimationSet里面。

4、我们使用这个AnimationSet来创建了一个LayoutAnimationController,然后设置了各个View之间动画的延迟。

5、最后,我们给ListView添加这个LayoutAnimationController,设置动画效果。

大部分FrameWork提供的动画都看起来像TranslateAnimation,让我们来看看这部分代码,构造函数定义如下:

public TranslateAnimation(int fromXType, float fromXValue, int toXType,
							float toXValue, int fromYType, float fromYValue, int toYType,
							float toYValue) 
           

这个使用方法很简单:我们需要提供初始的和动画之后的xy坐标。Android提供了三种从哪里开始计算坐标的方法,如下:

  • Animation.ABSOLUTE
  • Animation.RELATIVE_TO_PARENT
  • Animation.RELATIVE_TO_SELF

如果我们回过头来看看我们只限的例子,我们就可以解释那一部分的代码了:

  • 初始X:Parent提供的坐标
  • 初始Y:距离Parent提供的坐标距离是-1
  • 最终X:由Parent提供的坐标
  • 最终Y:由Parent提供的坐标

最终的效果就是每一行好像都是竖直掉落下来的样子。由于设置了一个延迟,所以看上去就像是级联一样的连续。

6.1 总结

给ViewGroup添加动画非常简单,他们会让你的程序看上去非常专业和精美。这个Hack里仅仅介绍了很小的一部分功能,比如你也可以替换一下默认的interpolator(插入器),如果是BounceInterpolator,看上去就好像是每个child弹跳是弹上去的一样。而且你也可以设置这些children的动画的次序。

使用你的想象力来创造一些有趣的东西吧,但是不要乱用它们,过多的使用动画效果也是不合理的。

6.2 相关链接

http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html

转载请注明原地址,谢谢!

http://blog.csdn.net/kost_/article/details/13776487

代码下载地址:

http://download.csdn.net/detail/u011418185/6483479