yunshuipiao/Potato

Android Animation Summary

yunshuipiao opened this issue · 0 comments

Android Animation Summary

[TOC]

动画作为 Android 中提升用户体验的一部分,也是非常重要的模块。这篇文章总结 Android 中与动画使用相关的部分。

概述

Android 中的动画分为三大类

  • View 动画(补间动画和帧动画)
  • Transition 过渡动画
  • 属性动画

动画的本质是将作用对象的属性值在一段时间内进行缓慢改变,将每一个小的时间片对应的属性值进行修改并不断重绘制,形成动画

View 动画

主要分为四种,

名称 标签 子类 效果
平移动画 TranslateAnimation 移动
缩放动画 ScaleAnimation 缩放
旋转动画 RotateAnimation 旋转
透明度 AlphaAnimation 透明度

另外还有一种帧动画也归于 View 动画。

View 动画可以使用 xml 描述,也可以使用代码描述。

帧动画就是顺序播放一组预先定义好的图片, 系统提供了AnimationDrawable来使用帧动画。

Transition(过渡动画)

用于控制 ViewGroup 的 Item的出场效果,和 Activity 的专场效果。

进入和退出 Activity 时的动画:

Intent intent = new Intent(this, AnimActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
 @Override
    public void finish() {        
    super.finish();        
    overridePendingTransition(R.anim.enter_anim, R.anim.exit_anim);
    }

属性动画

核心原理

ObjectAnimator, 继承自 ValueAnimator,使用这个类可以对任意对象的任意属性进行动画操作。而ValueAnimator是整个属性动画机制当中最核心的一个类。

属性动画的运行机制是通过不断地对值进行操作来实现的,而初始值和结束值之间的动画过渡就是由ValueAnimator这个类来负责计算的。它的内部使用一种时间循环的机制来计算值与值之间的动画过渡,我们只需要将初始值和结束值提供给ValueAnimator,并且告诉它动画所需运行的时长,那么ValueAnimator就会自动帮我们完成从初始值平滑地过渡到结束值这样的效果。除此之外,ValueAnimator还负责管理动画的播放次数、播放模式、以及对动画设置监听器等。

TypeEvaluator 决定了动画如何从初始值过渡到结束值。
TimeInterpolator 决定了动画从初始值过渡到结束值的节奏。

View 动画和属性动画对比

  • 属性动画才是真正的实现了view的移动,View 动画的移动更像是在不同地方绘制了一个影子,实际的对象还是处于原来的地方。

  • 当我们把动画的repeatCount设置为无限循环时,如果在Activity退出时没有及时将动画停止,属性动画会导致Activity无法释放而导致内存泄漏,而补间动画却没有问题。因此,使用属性动画时切记在Activity执行 onStop 方法时顺便将动画停止。

  • 使用帧动画时需要注意,不要使用过多特别大的图,容易导致内存不足。