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();

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

时间: 2024-10-03 13:45:10

Android 动画详解之属性动画(Property Animation)的相关文章

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

Hello,大家好,最近好长时间没有写博客了,因为我决定辞职了. 废话不多说,我们还是来看属性动画在上一篇Android 动画详解之属性动画(Property Animation)中我们简单的介绍了一下属性动画的用法,其实属性动画还有更多有趣的用法. 1,在xml中使用 在eclipse中我们右键新建xml可以选择新建属性动画,如图 我们选择objectAnimator,然后我们就会看到熟悉的一幕 然后我们用智能提示就可以看到更熟悉的 没错,这下我们应该知道怎么用xml布局来写属性动画了吧 <s

android动画详解四 创建动画

· 使用ValueAnimator进行动画 通过指定一些int, float或color等类型的值的集合,ValueAnimator 使你可以对这些类型的值进行动画.你需通过调用ValueAnimator 的某个工厂方法来获得一个ValueAnimator 对象,比如:ofInt(), ofFloat(), 或 ofObject().例如: ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f); animation.setDuration

Android 动画详解之Frame动画 (Drawable Animation)

Frame动画就像是gif图,通过一些静态图片来达到动画的效果. Android sdk中的AnimationDrawable就是专门针对Frame动画,当然Frame动画也可在java代码或者xml中写,但是提倡大家还是在xml中写,先上个效果图. <span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?> <animation-list

Animation动画详解(十)——联合动画的XML实现与使用示例

前言: 上篇给大家讲了有关AnimatorSet的代码实现方法,这篇我们就分别来看看如何利用xml来实现ValueAnimator.ObjectAnimator和AnimatorSet; 在文章最后,将利用AnimatorSet来实现一个路径动画,效果图如下: (这里实现的是一个动画菜单,在点击菜单按钮时,弹出各个菜单)

android动画详解三 动画API概述

· 属性动画与view动画的不同之处 view动画系统提供了仅动画View 对象的能力,所以如果你想动画非View 对象,你就要自己实现代码. view动画系统实际上还被强制仅能对 View 的少数属性进行动画,比如缩放和旋转,而不能对背景色进行. view动画的另一个坏处是它仅修改View的绘制位置,而不是View的实际位置.例如,如果你动画一个移动穿越屏幕,button的绘制位置是正确的,但实际你可以点击它的位置却没有变,所以你必须去实现你自己的逻辑来处理它. 使用属性动画系统时,这个限制被

Animation动画详解(十一)——layoutAnimation与gridLayoutAnimation

前言:人或许天生是懒惰的,明知道的不足,却不努力弥补. 相关博客: 1.<Animation 动画详解(一)--alpha.scale.translate.rotate.set的xml属性及用法> 2.<Animation动画详解(二)--Interpolator插值器> 3.<Animation动画详解(三)-- 代码生成alpha.scale.translate.rotate.set及插值器动画> 4.<Animation动画详解(四)--ValueAnima

Android图文详解属性动画

Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)开始,Android开始支持属性动画,本文主要讲解如何使用属性动画.关于视图动画可以参见博文<Android四大视图动画图文详解>. 概述 视图动画局限比较大,如下所述: 视图动画只能使用在View上面. 视图动画并没有真正改变View相应的属性值,这导致了UI效果与实际View状态存在差异,并导致了一

属性动画详解一(Property Animation)

效果图: Android动画有两类: 1.View Animation(Frame Animation,Tween Animation) 2.Property Animation 其中,上述效果是用第二类属性动画做的. 什么是属性动画? 通俗的说,属性动画就是在一定的时间内,按照一定的规律来改变对象的属性(该属性对于该对象应该是从形态(大小,位置等)上可以感受到的),从而是对象展现出动画的效果. 作用:可以定义动画来改变对象的属性( You can define an animation to

android之属性动画和布局动画详解

1.属性动画是什么不废话,不懂的可以百度一下参考郭霖大神的动画详解篇:这里仅仅提供一个demo说说用法,抛砖引玉,代码的注释写的已经很详细,不再多说废话,一下提供的是一个基础的demo,讲解的是objectAnimator的基础用法,如平移.旋转.缩放.渐变以及动画的集合:至于objectAnimator(必须的有set get方法)和valueAnimator的详细区别也可参考郭霖大神的动画详解篇 2.除此基本用法,还有估值器和插值器 (1)插值器:动画速率的变换,有点类似物理的加速度,就是该