首页 > 代码库 > Android 动画详解之属性动画(Property Animation)

Android 动画详解之属性动画(Property Animation)

转载请注明http://blog.csdn.net/u014163726/article/details/41210951


前文也提到过Android 3.0以后引入了属性动画,属性动画可以轻而易举的办到许多View动画做不到的事,今天我们就来学习一下属性动画。

前文提到过View动画只是改变了View的绘制效果,而属性动画则是真正的改变一个属性,效果如下图。


对比Android 动画详解之View动画我们可以看到明显的区别,那么属性动画究竟是怎么用的呢,莫慌,接下来代码奉上。


1,ObjectAnimator

属性动画用起来并不复杂可以说比View动画还简单了很多,上面的平移动画

//mButton:对象
				//TranslationY:属性
				//300偏移量
				ObjectAnimator.ofFloat(mButton, "TranslationY",300)
						.setDuration(2000).start();

一句话而已就实现了平移动画,但属性动画能办到的并不止如此,我们修改一个属性看看。

// mButton:对象
				// TranslationY:属性
				// 300偏移量
				ObjectAnimator.ofFloat(mButton, "RotationY", 360)
						.setDuration(2000).start();

可能看到这很多人都有疑惑了,这个传的属性名究竟是什么,其实使用ObjectAnimator必须指定一个对象以及一个对象属性,也就是要有get&set函数,如果没有的话是不能是用ObjectAnimator,但是我们可以使用另外一种ValueAnimator。


2,ValueAnimator

我们还是先来看个例子,用ValueAnimator完成上面的效果,该怎么做呢。

 ValueAnimator valueAnimator = ValueAnimator.ofFloat(360);
				 valueAnimator.setDuration(2000);
眼熟吧。。但是这样是没有办法用的,因为没有指定对象以及属性,如果想要完成动画效果需要实现ValueAnimator.onUpdateListener接口。

	ValueAnimator valueAnimator = ValueAnimator.ofFloat(360);
				valueAnimator.setDuration(2000);
				valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
					@Override
					public void onAnimationUpdate(ValueAnimator animation) {
						mButton.setRotationY((Float) animation
								.getAnimatedValue());
					}
				});
通过animation.getAnimatedValue()可以得到根据时间以及偏移量计算出来的当前属性值,拿到当前属性值之后我们自然是想干什么就干什么啦,顺带一提ObjectAnimator就是继承ValueAnimator。


3,AnimatorSet

我们的属性动画当然是有set功能的,而且用法很有意思。


	AnimatorSet animatorSet = new AnimatorSet();
				ValueAnimator valueAnimator = ValueAnimator.ofFloat(360);
				valueAnimator.setDuration(2000);
				valueAnimator.addUpdateListener(new AnimatorUpdateListener() {
					@Override
					public void onAnimationUpdate(ValueAnimator animation) {
						mImageView.setRotationY((Float) animation
								.getAnimatedValue());
					}
				});

				animatorSet.play(valueAnimator).with(
						ObjectAnimator.ofFloat(v, "RotationY", 360)
								.setDuration(2000));
				animatorSet.start();
animatorSet.play是添加动画.with是同时播放还有.before.after相信大家都知道是干什么的了,但这只能是同时播放不同对象的动画,如果我们想让同一对象同时改变属性应该怎么做呢。


4,ViewPropertyAnimator


同时调用RotationX和RotationY,哈哈是不是很有快感。

	PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("RotationX", 360f);
				PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("RotationY", 360f);
				ObjectAnimator.ofPropertyValuesHolder(v, p1, p2).setDuration(2000).start();

关于属性动画还有很有意思的东西没有介绍,我们留在下一期!



Android 动画详解之属性动画(Property Animation)