背景
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本地是否要保留原文件