yunshuipiao / Potato

Read the fucking source code for the Android interview
Apache License 2.0
80 stars 12 forks source link

Android Animation Summary #42

Open yunshuipiao opened 5 years ago

yunshuipiao commented 5 years ago

Android Animation Summary

[TOC]

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

概述

Android 中的动画分为三大类

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

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 动画和属性动画对比