Android:如何在使用SurfaceView时支持多种屏幕分辨率

时间:2012-07-20 13:45:31

标签: android image bitmap scaling resolutions

我在支持不同的设备及其屏幕时遇到了问题:我有游戏,我在网格中绘制了很多70px * 70px的图标。

.png文件是70 * 70 @ 315ppi。

在我的java代码中,我现在使用以下代码将图像绘制到网格中:

for (int x = 0; x < Map.getxSize(); x++) {
        for (int y = 0; y < Map.getySize(); y++) {
            ballSprite.setX(x*70);
            ballSprite.setY(y*70);
            ballSprite.setCurrentFrame(Map.mArray[x][y]-1); //-1 because 0 field is empty
            ballSprite.onDraw(canvas);
        }
    }
(x * 70)与我的Galaxy Nexus配合得很好,但是当我在hdpi 800的设备上测试时,70px的值太高了。

将此值调整到不同屏幕的最佳方法是什么? 谢谢你帮助我!

2 个答案:

答案 0 :(得分:3)

将X和Y乘以适当的比例因子。

Display display = getWindowManager().getDefaultDisplay(); 
int currentWidth = display.getWidth();  
int currentHeight = display.getHeight();

float scaleX = width that application was written for (in your case Galaxy Nexus width) / currentWidth  .
float scaleY = height that application was written for (in your case Galaxy Nexus height) / currentHeight .

ballSprite.setX(x * 70 * scaleX)等......

答案 1 :(得分:0)

请参考

 https://developer.android.com/training/multiscreen/screendensities

你会看到

36x36 (0.75x) for low-density (ldpi)
48x48 (1.0x baseline) for medium-density (mdpi)
72x72 (1.5x) for high-density (hdpi)
96x96 (2.0x) for extra-high-density (xhdpi)
144x144 (3.0x) for extra-extra-high-density (xxhdpi)
192x192 (4.0x) for extra-extra-extra-high-density (xxxhdpi)

这些您会看到 0.75 倍到 4.0 倍,我很确定您将使用这些值来缩放 UI 对象以适应屏幕密度。您可能会发现更多,但这些是主要的。

PS 新设备不使用从 mdpi 到 xxxhdpi。您将在链接中看到这一点。