安卓提供了很多强大的API来支持UI组件的动画以及描画自定义2D和3D图像。下面的部分概述了这些API和系统在这方面的能力,以期帮助你决定哪些方法更适合你的需求。
动画
安卓框架层提供了2大动画系统:属性动画(引进自安卓3.0)和组件动画。这两个动画系统都是可行的选择,但是属性动画系统,总体上讲,是倾向建议使用的方法,因为它更灵活,且功能多。除了这两个系统外,你还可以利用图片动画,它允许你加载图片资源然后一帧一帧显示。
属性动画(PropertyAnimation)
引进自安卓3.0(API等级11),这个属性动画系统允许你为对象的任何属性设置动画,包括那些不需要渲染到屏幕上的属性。这个系统是可扩展的,也允许你为自定义类型的属性设置动画。
组件动画(ViewAnimation)
组件动画是较早的动画系统,而且只能用于视图组件(View类对象)。它相对来说容易设置,而且提供了足够能力来满足大多数应用需要。
图片动画(DrawableAnimation)
图片动画像放电影似地连续播放一个一个的图片。如果你想使用那些用图片资源来达到目的的动画,比如位图的渐变等,那么这种方法是非常有用的。
2D和 3D图像
当开始写应用的时候,清楚地知道你的图像方面的需求是非常重要的。不同的图像任务需求需要对应的技术才能更好地完成。例如,对于静止应用的图像和动画方面的实现效率就会比一些交互游戏要高。这里,我们将讨论在安卓上描画图像方面你可以使用的几个选择以及它们的适用方面。
画布和图片(Canvasand drawables)
安卓为满足大量的用户界面的需求提供了一组View组件。你可以扩展修改这些组件的外观和行为。此外,你可以通过Canvas中的描画方法来自定义2D渲染或者为一些比如纹理按钮或者帧动画之类的事情创建一些Drawable对象。
硬件加速(HardwareAcceleration)
出现于安卓3.0,针对Canvas API所做的大部分描画工作你都可以使用硬件加速来提升性能。
OpenGL
安卓通过提供安卓框架层API以及NDK两种方式来支持OpenGL ES1.0和2.0。如果你想为你的应用添加一些连Canvas API都无法支持的图像方面的增强效果,或者你无须平台无关,且不需要高性能的话,那么使用框架层API是比较合理的。与NDK比较而言,使用框架层API的性能会差一些,所以对于那些图像密集型的应用比如游戏,使用NDK是比较好的(重要的是,使用框架层API也是可以获得能够接受的性能表现的。例如,Google Body应用就是完全使用框架层API来开发的。)如果你有很多本地代码需要移植到安卓的话,那么使用NDK形式的OpenGL是非常有用的。