一、Android系统是可以支持不同分辨率的,这一点毋庸置疑,但是它无法做到支持任意的分辨率
如果想要搭建一个支持多种分辨率的Android应用程序,一般的做法是这样的:
首先,按照HVGA(分辨率480×320左右,通常使用160ppi——一英寸中包含160个像素点)分辨率构建软件UI,其中使用的图片通常存放在开发目录下的drawable-mdpi文件夹中,mdpi表示中等程度的dpi分辨率。
当设计UI可以满足需求之后,将该文件夹中的图片进行缩放,对于QVGA类屏幕(分辨率320×240左右,通常使用120ppi)需要将mdpi图片缩小75%放入drawable-ldpi文件夹中以满足UI要求,对于WVGA类屏幕(分辨率800×480左右,通常使用240ppi)需要将mdpi图片放大150%放入drawable-hdpi文件夹中以满足UI要求。
运行Android系统的手机在运行时会根据屏幕情况,自动加载对应dpi目录中的图片,从而满足对不同分辨率的适应要求。
可见,Android SDK仅提供了三组不同的UI图片存放目录,而最高分辨率仅支持到240ppi。关键在于M9和IPhone4的屏幕细腻程度达到了320ppi以上,也就是说,在SDK中即便是用最大分辨率的图片依然无法满足屏幕要求。
二、Android系统支持一种称为9patch格式图片,即将图片分割为9个部分,其中中间部分可以通过像素复制的方式进行图像拉伸。这种图片格式对于那些需要保持图像边缘部分不变,而中间像素相似的图片拉伸需求非常管用。例如一张需要适应不同分辨率情况下的按钮背景。但是这种图片的使用是有局限的,也就是仅适用于那些控件或屏幕区域的背景图。
以上说明解释了Android SDK如何适应多种不同的屏幕分辨率,不难发现,对于960×640分辨率的屏幕来说,开发应用程序必须重新对UI图片进行手工缩放才能满足要求。尤其是对于游戏来说,由于图片比较复杂,一般无法使用9patch方式拉伸。
可见,如果在应用中大量使用图片作为软件UI,则需要重新设计才能满足M9分辨率,如果使用图像编程接口画出来的UI,则可以在运行时通过屏幕像素密度参数来动态设定。最悲剧的就是游戏了,几乎全是使用图片。