该文不从实现或者绘画原理里区别animation和animator,主要是从特点,使用方法和形式来区别。
特点
简单来说,比起animation,animator能更精确得控制动画。
- 动画的种类。前者只有透明度,旋转,平移,伸缩4中属性,而对于后者,只要是该控件的属性,且有setter该属性的方法就都可以对该属性执行一种动态变化的效果。
- 可操作的对象。前者只能对UI组件执行动画,但属性动画几乎可以对任何对象执行动画(不管它是否显示在屏幕上)。
- 动画播放顺序。在属性动画中,AnimatorSet正是通过playTogether()、playSequentially()、animSet.play().with()、before()、after()这些方法来控制多个动画协同工作,从而做到对动画播放顺序的精确控制
形式
xml的元素
- animation
- animator
<set>
<objectAnimator
android:propertyName="x"
android:duration="500"
android:valueTo="400"
android:valueType="intType"/>
<objectAnimator
android:propertyName="y"
android:duration="500"
android:valueTo="300"
android:valueType="intType"/>
</set>
propertyValuesHolder:实现用法不一样而已,效果一样。所以不加研究。用到再做记录
使用方法
animation主要用于tween动画。
//根据资源得到动画
Animation rotateAnimation =
AnimationUtils.loadAnimation(this, R.anim.rotate_anim);
//播放动画完成之后,保留动画最后的状态
rotateAnimation.setFillAfter(true);
//播放动画
btnRotate.startAnimation(rotateAnimation);
animator主要用于属性动画。
ObjectAnimator animator = ObjectAnimator.ofFloat(textview, "alpha", 1f, 0f, 1f);
animator.setDuration(5000);
animator.start();
AnimatorSet animatorSet = new AnimatorSet();
//移动
ObjectAnimator ty = ObjectAnimator.ofFloat(btn, "translationY", 0,300);
ty.setDuration(1000);
//旋转
ObjectAnimator ry = ObjectAnimator.ofFloat(btn, "rotationY", 0,1080);
ry.setDuration(1500);
//透明度
ObjectAnimator alpha = ObjectAnimator.ofFloat(btn, "alpha", 1,0,0.5f,1);
alpha.setDuration(2000);
//缩放
ObjectAnimator sx = ObjectAnimator.ofFloat(btn, "scaleX", 1,0.5f);
alpha.setDuration(1000);
//一起播放
// animatorSet.playTogether(items);
animatorSet.play(ry).with(sx).after(ty).before(alpha);
animatorSet.start();