关于安卓的动画。
分类就不详叙了,以前我只知道Frame动画、Tween动画,还耳闻过属性动画,但因为一直没用到动画,所以没去研究。
目前项目中涉及到了动画,所以做了个简单的总结,主要针对于Object Animator和Tween Animation的区别。
其实要实现的效果也很简单,无非就是Alpha(透明度)、Translate(位移)、Rotate(旋转)、Scale(放缩),
拿简单的Translate(位移)来举例:
至于为什么拿位移动画来举例,因为它的特殊性,后面会说到。
(1).Tween Animation是这么写的:
//声明一个位移动画,并赋值 X轴从0 -> -50 , Y轴从 0到 600.
Animation mTranslate = new TranslateAnimation(0, -50, 0, 600);
//动画时间设置为2秒
mTranslate.setDuration(2000);
//Interpolator的效果百度一查一大堆,就不说了,就是加速啊,减速啊,反弹啊之类的效果
mTranslate.setInterpolator(new BounceInterpolator());
//给View(一般来说是控件)设置上刚才定义的位移动画
View.startAnimation(mTranslate);
效果就是从View的原位置斜向下位移(带BounceInterpolator效果,反弹三次后静止),
(2).Object Animator是这么写的:
//声明一个属性动画,并赋值,注意,View是在这里被当做参数赋值的
//同时要注意的是translationY,这个参数可以替换为其他效果,rotateY、rotateX啊等等
Animator mAnimator = ObjectAnimator.ofFloat(view, "translationY", 0, 600);
mAnimator.setDuration(2000);
mAnimator.setInterpolator(new BounceInterpolator());
mAnimator.start();
效果就是从View的原位置正向下位移(带BounceInterpolator效果,反弹三次后静止),
那其实就这么多内容我为什么还要写一篇文章记录下来呢?
原因很简单:
Animator和Animation是有一些细微的效果差异的。
就拿上面的例子来说,区别在于
a 、(1)中的View动画效果执行结束后,会回到View本来的位置,即开始的位置,而(2)中的View动画执行后,则会停留在动画结束的位置
b、(1)中的View在动画执行过程中,点击View的原本位置,即开始的位置(注意,位置动画执行过程中,这个位置已经没有图像了),点击仍会触发动画。效果就是—>View在执行的动画会被打断,然后重新开始执行。
而(2)中的View在动画执行过程中,执行动画的View的位置是在变化的,你要点击到在运动中的View,才可以中断动画,让其重新执行动画过程。
c、 但是两者都稍有不协调的地方在于,Animation不会结束在动画结束的位置,而是在动画结束后突兀的出现在原本的开始位置。 而Animator 虽然结束在正确的位置,但再次触发动画的时候,则是从最初那次的动画开始位置执行,并不是把结束位置当做新的开始位置,同样会显得很突兀。
当然,这也可以被当做特性被使用,主要依据项目本身不同的需求而做相应的策略处理。
文章写到一半才想起,之所以写这篇文章,是因为之前搜文章都没搜出满意解释不同动画区别的解释。
本文也只是做了一个简单的比较,并没有对其他动画做一些基本使用的介绍,不过相信机智的你通过其他文章一定能掌握到的。
刚才重新搜了一下,发现了这篇文章,觉得很好,也贴给大家。
http://www.tuicool.com/articles/zM7RnqB [Android 动画]简要分析一下Animator 与 Animation
PS后话:
之前写文章都是当做给自己记笔记,格调太低,这是迄今为止我真正用心手码的一篇文章,为了自己,也为了各位有缘的小伙伴,
我想说的是,之前写文章的态度不够严谨,从这篇文章开始,我要用心写哈哈,毕竟,我们码农是可以有洁癖的不是吗?要慢慢打磨自己的项目,自己的文章,一切都当亲儿子对待。