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

标签 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 的设备上测试它时,70 像素的值太高了。

使此值适应不同屏幕的最佳方法是什么? 感谢您帮助我!

最佳答案

将 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) 等...

关于Android:使用 SurfaceView 时如何支持多种屏幕分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11580649/

相关文章:

android - 如何保存应用设置?

java - 尝试获取用户的个人资料信息时出现错误 : Captcha is needed (VK Android SDK)

android - android中的白色位图

android - BitmapFun 示例存在缓存问题

android - 如何从 Android .apk assets 文件夹中解压 LUA 脚本?

java - 使用batcher.drawSprite绘制游戏中的所有图像是否正确?

iphone - 使用 CGContext 裁剪 UIImage 时出现问题?

HTML 背景图像

html - 箭头纯 CSS 图像 slider

C++ 一种将像素 vector 写入 BMP 的通用方法