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

转载请注明

前文也提到过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() {@Overridepublic 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() {@Overridepublic 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)

相关文章:

你感兴趣的文章:

标签云: