Android 的动画可以分为 3 种:View 动画、帧动画和属性动画。
View 动画通过对场景里的对象不断做图像变换(平移、缩放、旋转、透明度)从而产生动画效果,
帧动画通过顺序播放一系列图像从而产生动画效果,可以简单理解为图片切换动画。
名称 | 标签 | 子类 | 效果 |
---|---|---|---|
平移动画 | `` | TranslateAnimation | 移动 View |
缩放动画 | `` | ScaleAnimation | 放大或缩小 View |
旋转动画 | `` | RotateAnimation | 旋转 View |
透明度动画 | `` | AlphaAnimation | 改变 View 透明度 |
AnimationUtils.loadAnimation()
可以用来加载 XML 中定义的 View 动画。
继承 Animation 这个抽象类,然后重写它的 initialize()
和 applyTransformation()
方法,在 initialize()
方法中做一些初始化工作,在 applyTransformation()
中进行相应的矩阵变换即可,很多时候需要采用 Camera 来简化矩阵变换的概念。
帧动画是顺序播放一组预先定义好的图片。系统提供了 AnimationDrawable 来使用帧动画。首先需要通过 XML 定义一个 AnimationDrawable,然后将上述的 Drawable 作为 View 的背景并通过 Drawable 来播放动画即可。
AnimationDrawable drawable = (AnimationDrawable)view.getBackground();
drawable.start();
属性动画可以对任意对象的属性进行动画,而不仅仅是 View,动画默认时间间隔 300ms,默认帧率 10ms/帧。
属性动画要求动画作用的对象提供该属性的 set 方法,属性动画根据传递的该属性的初始值和最终值,以动画的效果多次区调用 set 方法。每次传递给 set 方法的值都不一样,随着时间的推移,所传递的值越来越接近最终值。如果动画的时候没有传递初值,那么还要提供 get 方法,因为系统要获取属性的初始值。
-
OOM 问题
-
内存泄漏
-
兼容性问题
-
View 动画的问题
View 动画是对 View 的影像做动画,并不是真正的改变 View 的状态,因此有时候会出现动画完成后 View 无法隐藏的问题,即 setVisibility(View.GONE) 失效了,这个时候只要调用 view.clearAnimation() 清楚了 View 动画即可解决问题。
- 不要使用 px
在进行动画的过程中,要尽量使用 dp,使用 px 会导致在不同的设备上有不同的效果。
-
动画元素的交互
-
硬件加速
在使用动画的过程中,建议开启硬件加速,这样会提高动画的流畅性。