Android应用篇 - Animation 和 Animator

Android应用篇 - Animation 和 Animator_第1张图片

这篇文章来讲讲 Android 中的动画,Animation 和 Animator。

 

目录:

  1. Animation
  2. Animator

 

 

1. Animation

 

  • 1.1 简介

Animation 分为两种:

  • Tween Animation (渐变动画):通过对场景里的对象不断做图像变换 (平移、缩放、旋转) 产生动画效果。
  • Frame Animation (帧动画)   :顺序播放事先做好的图像,类似放电影。

而 Tween Animation 又分为四种:

  • Alpha:渐变透明度动画效果。
  • Scale:渐变尺寸伸缩动画效果。
  • Translate:画面转换位置移动动画效果。
  • Rotate:画面转换位置移动动画效果。

可以使用 xml 或者 代码来实现,Animation 的具体使用可以看这篇文章:android - Animation详解。那么既然有了 Animation,Android 为什么还要提供属性动画 (Animator)?

 

  • 1.2 缺点

 

(1) 作用对象局限:View

只能够作用在视图 View 上,即只可以对一个 ButtonTextView、甚至是 LinearLayout、或者其它继承自 View 的组件进行动画操作,但无法对非 View 的对象进行动画操作。

有些情况下的动画效果只是视图的某个属性 & 对象而不是整个视图。比如如需要实现视图的颜色动态变化,那么就需要操作视图的颜色属性从而实现动画效果,而不是针对整个视图进行动画操作。

 

(2) 没有改变 View 的属性,只是改变视觉效果

补间动画只是改变了 View 的视觉效果,而不会真正去改变 View 的属性。如将屏幕左上角的按钮通过补间动画移动到屏幕的右下角,点击当前按钮位置(屏幕右下角)是没有效果的,因为实际上按钮还是停留在屏幕左上角,补间动画只是将这个按钮绘制到屏幕右下角,改变了视觉效果而已,即内部坐标没有发生变化。如果想真正改变 View 的位置,可以监听动画状态,在结束时设置 View 的 LayoutParams。

Animator 为何不能真正改变 View 的位置,而属性动画却可以?

  • Animation 改变的只是 View 的显示,而没有改变 View 的响应区域;而属性动画会通过反射技术来获取和执行属性的get、set 方法,从而改变了对象位置的属性值。
  • Animation 产生的动画数据实际并不是应用在 View 本身的,而是应用在 RenderNode 或者 Canvas 上的,这就是为什么 Animation 不会改变 View 的属性的根本所在。

 

(3) 动画效果单一

补间动画只能实现平移、旋转、缩放 & 透明度这些简单的动画需求。一旦遇到相对复杂的动画效果,即超出了上述 4 种动画效果,那么补间动画则无法实现。

 

 

2. Animator

​​​​​​​为了解决补间动画的缺陷,在 Android 3.0 开始,系统提供了一种全新的动画模式:属性动画 (Property Animation)。它的特点是什么呢?

  • 作用对象进行了扩展:不只是 View 对象,可以是任何对象。
  • 动画效果:不只是 4 种基本变换,还有其他动画效果。
  • 作用领域:Android 3.0 后引入的。

它的原理是:在一定时间间隔内,通过不断对值进行改变,并不断将该值赋给对象的属性,从而实现该对象在该属性上的动画效果 (可以是任意对象的任意属性)。

Animator 的具体使用可以看这篇文章:【Android】属性动画(基本用法)。

 

 

你可能感兴趣的:(Android应用篇)