支持多屏幕尺寸

android背后有一些操作用来处理不同屏幕尺寸的情况,概括的来说,就是android会按照你所开发的应用程序的大小与实际屏幕的大小进行对应的大小缩放。举个例子,你所开发的应用程序的大小是480*800,但是实际屏幕尺寸是320*480,那么android操作系统就是按照对应的比例对你的屏幕进行缩放,即x方向上从480缩放到320,y方向上从800缩放到480。假如你原来的界面上有一个矩形控件的左上角位置在(30,50),大小是(90,150),那么经过缩放后,android操作系统将会把这个矩形控件放置在左上角是(20,30)的位置,大小变为(60,90),即x方向缩放为原来的2/3(320/480),y方向上缩放为原来的3/5(480/800)。这是android系统自动后台处理的。那么这有什么问题呢?很明显,由于x和y方向上缩放比例不一致,导致最终界面上显示的控件变形了。本来设计的很好的布局,经过这一变形,肯定就不好看了。
       针对这一问题,我想既然android是这样处理的,有这个问题,那么我们自己可以事先进行处理不就行了?所以,我在程序中添加了一个GameConfig类,这个类里面存储了所有控件的位置和大小,而且都是static类型的。应用程序开始运行之前,先初始化这个类,这个类的初始函数init(DisplayMetrics)用于初始化所有控件的位置和大小,DisplayMetrics参数用于传递当前屏幕的尺寸大小。等这个类初始化完了之后,再绘制界面(调用这个类里面的各个控件的位置和大小),这样就可以自己定义不同屏幕下控件的显示界面了。
       在GameConfig类里面,我定义了一个RATIO,OFFSET_LEFT和OFFSET_TOP三个变量,RATIO记录比值较小的那个方向的比值,即RATIO=Math.min((float)screenWidth / 480, (float)screenHeight / 800)。,然后在比值较少的那个方向上的OFFSET值为0,而比值较大的方向上的OFFSET值变为屏幕尺寸大小减去变换后的尺寸大小,然后除以2。例如,假设变为320*480,则明显是y方向上变化较小(480/800<320/480),那么这时OFFSET_TOP=0,OFFSET_LEFT= = Math.round((screenWidth - 480 * RATIO) / 2),这样就保证了控件的大小按照同一个比例RATIO在缩放,而控件的位置按照居中原则放置。当然,如果你不嫌麻烦的话,你还可以设计其他的复杂的更好的布局模式。
       添加了GameConfig类之后,把程序运行在不同的模拟器上面,经过在480*854,480*800,320*480,240*320这四种不同尺寸的屏幕上面测试运行,都能够保持界面的相对布局不会改变,游戏体验不会有很明显的差异。

posted @ 2012-08-02 10:19  集少成多  阅读(214)  评论(0编辑  收藏  举报