Android 属性动画

安卓属性动画:

1.视图动画(包括补间动画和逐帧动画);
2.属性动画(Android 3.0(API 11)后的新特性

逐帧动画&补间动画存在一定的缺点:

  • 只能够作用在视图View上,即只可以对一个Button、TextView、甚至是LinearLayout、或者其他继承自View的组件进行动画操作,但无法对非View的对象进行动画操作;
    ·有些情况下的动画效果只是视图的某个属性&对象而不是整个视图;如现需要实现视图的颜色动态变化,那么就需要操作视图的颜色属性从而实现动画效果,而不是针对整个视图进行动画操作。
  • 没有改变View的属性,只是改变视觉效果
    ·视图动画只是改变了view的显示效果,而不会真正去改变View的属性;
  • 动画效果单一

属性动画机制中最核心的一个类:ValueAnimator
实现动画的原理:通过不断控制值的变化,再不断手动赋给对象的属性,从而实现动画效果。
ObjectAnimator类原理:通过不断控制值的变化,再不断自动赋给对象的属性,从而实现动画效果
组合动画:AnimatorSet

ObjectAnimator translation = ObjectAnimator.ofFloat(fab,"translationY",0,300,0,-300,0);
ObjectAnimator rotate = ObjectAnimator.ofFloat(fab,"rotation",0f,360f);
ObjectAnimator alpha = ObjectAnimator.ofFloat(fab,"alpha",1f,0f,1f);
//设置组合动画无限循环(把每个动画的播放次数设为循环):只能解决同时进行的动画,若动画之间没有同时进行,而是有先后次序的话,先设置无限循环的动画会覆盖掉后续所有的动画
translation.setRepeatCount(-1);
rotate.setRepeatCount(-1);
alpha.setRepeatCount(-1);
AnimatorSet animSet = new AnimatorSet();
animSet.play(translation).with(rotate).with(alpha);
animSet.setDuration(5000);
animSet.start();

AnimatorSet和AnimationSet的区别:

  • 继承关系不同,AnimatorSet使用的是Animator子类,AnimationSet使用的是Animator的子类;
  • 功能上AnimatorSet比AnimationSet更强大;
    AnimationSet功能较弱,只能将一个个动画组织起来同时执行;
    AnimatorSet不单单可以是多个动画同时执行,还可以将多个动画按照不同的顺序执行
  • 动画实现性质不同,Animation是针对视图外观的动画实现,动画被应用是外观改变但视图的出发点不会发生改变,还是在原来定义的位置。Animator是针对视图属性的动画实现。动画被应用时对象属性产生变化,最终导致视图外观变化。
posted @ 2019-01-16 14:14  Ricardoldc  阅读(122)  评论(0编辑  收藏  举报