Android动画总结

背景

Android动画其实是Android开发的一个基础能力,在开发中不可避免的需要去用到动画,github上也有一些很好的动画开源库例如:lottie,SVGA 等,但是轮子用多了,基础的倒是很容易忘,所以这里做个总结,备查纠错。(未完成待续。。)

动画分类

各自特点及区别

Android动画主要分为视图动画和属性动画,视图动画只有透明度,旋转,平移,伸缩四种,而属性动画则是只要是对象的属性且有setter该属性的方法就可以对该属性执行一种动态变化效果。视图动画主要是使用Animation,组合动画使用AnimationSet,而属性动画主要是Animator,组合使用AnimatorSet。视图动画主要就是四种操作,对对象的颜色,背景等就无能为力了。相对来说,属性动画会更精细点,能实现更多更好的效果。

视图动画

视图动画很早就出现在Android中,主要在android.view.animation包下面,这里可以看到主要是对View进行操作的,里面有很多的类帮助我们实现一些简单动画效果,如对view进行移动,缩放,旋转,淡入淡出等,并且我们可以借助AnimationSet将这些动作组合起来

  • 补间动画(Tween Animation)
名称 原理 对应Animation 子类
平移动画 移动视图位置 TranslateAnimation
缩放动画 放大缩小视图 ScaleAnimation
旋转动画 旋转视图位置 RotateAnimation
透明度动画 改变视图透明度 AlphaAnimation
  • 逐帧动画(Frame Animation)

这个类似动画片,一帧一帧播放,每一帧是一张图片,按顺序去播放一组预先定义好的图片,简单方便,但是容易OOM,占资源

属性动画

属性动画在Android3.1的时候才引入到Android中,主要在android.animator包下面。属性动画机制已经不仅仅是针对View来设计了(看包名就知道),也不限定于只能实现移动、缩放、旋转和淡入淡出这几种动画操作,同时也不在是视觉上的动画效果了。它实际上是一种不断对值进行操作的机制,并将值赋值到指定对象的指定属性上,可以是任意对象的任意属性(真的改变了对象属性)。属性动画的工作原理和逻辑:

步骤2中的插值器,默认会有一些系统自带的插值器,如下表,表示的是初始值到结束值的一个变化关系,关系到动画的一个显示效果。

名称 描述
插值器(Interpolator) 值的变化模式(匀速,加速)
估值器(TypeEvaluator) 决定值的具体变化数值
插值器名称 描述
AccelerateDecelerateInterpolator 先加速再减速
AccelerateInterpolator 先加速再一直加速
AnticipateInterpolator 先往后一下,再加速往前
AnticipateOvershootInterpolator 先往后一下,再一直往前超过终点,再往回收一下。
BounceInterpolator 最后会回弹一下
CycleInterpolator 重复几次,感觉就是环形进度条那种,具体我还没试过
DecelerateInterpolator 一直减速
LinearInterpolator 线性匀速
OvershootInterpolator 到了终点之后,超过一点,再往回走。有个参数可以定义,超过的力度。

ValueAnimator

  • 定义:通过不断控制值的变化,再不断手动赋值给对象的属性,从而实现动画效果。如下图:

  • 用法


ObjectAnimator

ObjectAnimator继承自ValueAnimator
测试Hexo本地是否要保留原文件