Android 中动画分为几个大类。1个是视图动画,一个是帧动画,最后是特色动画。帧动画是将帧设置为view的布景,这个简略,下面我们来看一下视图动画和特色动画的差异。

视图动画与特色动画的差异

Android的视图动画和特色动画在功用和运用上有一些显着的差异。

视图动画首要效果于视图,完结如缩放、旋转等效果。这种动画效果相对固定,只能运用于视图方针,且只能改动视图的巨细和方位,而不能真实改动视图的特色。视图动画在Android 3.0曾经的版别中广泛运用,但其在运用中的灵敏性相对较低。

相比之下,特色动画在Android 3.0之后引进,其功用和灵敏性都大大增强。特色动画可以对一个方针的特色进行操作,不仅能运用于视图方针,还能运用于任何方针。它不仅能完结缩放、旋转等效果,还能自界说动画效果,监听动画的进程,并在动画进程中或完结后实行特定的动作。特色动画通过改动方针的特色来完结动画,可以真实改动方针的特色。

总的来说,特色动画比视图动画更强大和灵敏。它不仅可以完结视图动画的全部功用,还具有更多的自界说选项和更广泛的运用规模。

那么为什么要知道视图动画

特色动画可以理解为视图动画的升级版别,所以视图动画的许多特点在特色动画里边仍是有,全部的视图动画都是继承与animation类,而全部的特色动画的父类都是Animator。回到核心问题上,为什么要知道视图动画,这个仍是看业务诉求,视图动画是不更改view的特色的,所以对哪些动画不需求更改特色的就很有用了,假设用特色动画,会重新计算整个布局,那么就因小失大了。

正文

特色

全部的视图动画都是继承与animation类。所以scale、alpha、translate、rotate都包括animation的基础特色。

  • duration 一次动画的耗时,单位为毫秒
  • fillAfter 假设设置为true 则标明动画结束后坚持动画结束的状况
  • fillBefore 假设设置为true,动画结束后,将还原为初始状况。
  • repeatCount 动画重复次数,当为infinite 的时分,表达无限循环
  • repeatMode 设定重复类型,reverse 倒序,restart 重放。
  • interpolator 设定插值器,就是动画的效果,假设不设置就是均衡分布的。

通过AnimationUtils.loadAnimation() 进行加载。所以全部的标签都有对应的类去表现,我们也可以直接通过创建对应的类去完结一些动画效果。

scale 标签

该标签用于缩放动画,可以完结动画调整控件尺度的效果。对应的类是:ScaleAnimation

  • android:fromXScale 动画初步时,控件在 轴方向上相对自身的缩放比例,浮点值。比方 1.0 代表自身无改动 代表缩小 倍, 2. 代表扩大 倍。

  • android toXScale 动画结束时 控件在 轴方向上相对自身的缩放比例,浮点值。

  • android :fromYScale 动画初步时,控件在 轴方向上相对自身 缩放比例,浮点值。

  • android: to YScale 动画结束时-, 件在 轴方向上 对自身 缩放比例 孚点值。

  • android pivotX 缩放初步点 轴坐标,可以是数值、百分数、百分数 种款式,如50 50% 50%p 。假设是数值, 标明在当时视图 左上角 ,即原点处加 50px ,作为缩放初步点 轴坐标 假设是 50 则标明在当时控件的左上角加上自己宽度的50%作为缩放初步点的X的坐标,假设说50%p 则表达在当时控件的左上角加上父控件宽度的50%作为缩放初步点的X轴坐标。

  • android:pivotY: 和pivotX 意义相似。

alpha 标签

用于完结骤变透明度动画效果。对应的类是:AlphaAnimation

  • fromAlpha 初步时分的透明度。0到1,0标明全透明,1标明完全不透明。
  • toAlpha 标明结束的时分的透明度,值和from 一起。

rotate 标签

用于完结搬运旋转动画效果。对应的类是:RotateAnimation

  • fromDegrees 初步旋转的角度,正标明顺时针角度,负标明逆时针角度。
  • toDegrees 结束时分的角度。
  • pivotX pivotY 旋转的中心方位,和scale 的相似。

translate 标签

用于完结画面改换方位移动到动画效果。对应的类:TranslateAnimation

  • fromXDelta fromYDelta 初步点的坐标,和pivotX 的值及其意义一起。
  • toYDelta toXDelta 结尾的方位。和from 取值一起。

set 标签

这个是一个容器。可以将alpha、scale、rotate、translate写到这个里边,用于完结组合动画。对应的类:AnimationSet

动画控制与监听

在业务诉求上,我们可能对动画进行一系列的操作,所以Animation还供应了一系列的函数用于操作动画。

  • cancel 取消动画。
  • reset 重置动画到初步前的状况。
  • setAnimationListener 设置动画的监听,敞开(onAnimationStart),结束(onAnimationEnd),重复(onAnimationRepeat)

插值器

用于控制动画的改动速率,假设不设置就是均匀分布。这些问题都是由Interpolator 类抉择。Android体系现已供应了一系列的插值器。在xml 中运用对应interpolator 特色。

AccelerateDeceleratelnterpolator

加速减速插值器, 标明在初步与结束的当地速率改动较慢,在中 间的时分加速。

Acceleratelnterpolator

加速插值器,标明在动画初步的当地速率改动比较慢,然后初步加速。

Deceleratelnte polator

Decelerateinterpolator 是减速插值器,标明在动画初步的一瞬间加速到最大值,然后逐骤变慢。

Linearlnterpolator

Linearlnterpolator 是线性插值器, 称匀速加速器 很显然 它的速率是坚持安稳的。

Bouncelnterpolator

Bouncelnterpolator 是弹跳插值器,模拟了控件自在落地后回弹的效果。相似于小球落地的效果。

Anticipatelnterpolator

Anticipatelnterpolator 是初始偏移插值器,标明在动画初步的时分向前偏移 段距离,然后运用动画。tension特色标明张力值,默许是2,越大初始的偏移量越大,速度越快。

Overshootlnterpolator

Overshootlnterpolator 是结束偏移插值器,标明在动画结束时,沿动画方向持续运动一段距离后再结束动画。tension特色标明张力值,默许是2,越大初始的偏移量越大,速度越快。

AnticipateOvershootlnterpolator

AnticipateOvershootlnterpolator Anticipatelnterpolator Overshootlnterpolator的结合体。即在动画初步时向前违背,在动画 束时向后偏移一段距离。

Cyclelnterpolator

Cyclelnterpolator 是循环插值器,标明动画循环播放特定的次数,速度沿正弦曲线改动。cycles 标明动画循环次数。这个优先级高于fillAfter 特色。

帧动画

需求运用animation-list 。对应的class:AnimationDrawable ,他首要用于关于帧进行拉伸,并把他设置为view的布景。

  • oneshot 假设说true 标明实行一次,false则是一起循环实行。
  • item 标明一帧,duration 标明当时帧实行时间,单位毫秒。

结束

一般而言,动画都是不写到xml中的,而是在需求的当地通过通过对应的功用创建对应的动画。假设一个动画被多个当地运用,那么写到xml 中也很合理,至于为什么满是xml的描绘,因为xml界说的特色在对应的class 中都会存在,运用xml更明晰一些。这个玩意属于偏门的知识点,说有用吧,有用,但是不必这个玩意,说没有用吧,有的时分又要用一下。