Android 开发:扩展以适应不同的设备

发布于 2024-11-27 08:57:54 字数 134 浏览 1 评论 0原文

我正在制作游戏并使用 SurfaceView。 我加载代表字符和背景等的位图。

但是我如何正确缩放它以适应大型设备、小型设备和其他设备?

//Simon

注意* dpi 不起作用,使用画布时只有像素起作用

Im making a game and using surfaceview.
I load bitmaps that represent character and background and so on.

But HOW do I properly scale it to fit large devices and small devices and other devices?

//Simon

NOTE* dpi wont work, only pixels work whhen using canvas

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

飞烟轻若梦 2024-12-04 08:57:54

您可以实现一个辅助方法,用于请求基于设备 dpi 的计算。

根据 @MitulNakum 对此 question 的回答,执行以下操作:

//note that mdpi is the standard
float getAdjustedDimension(float value){
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    switch(metrics.densityDpi){
         case DisplayMetrics.DENSITY_LOW:
              //api 4 and higher
              return 0.75 * value;
         case DisplayMetrics.DENSITY_MEDIUM:
              //api 4 and higher
              return value;
         case DisplayMetrics.DENSITY_HIGH:
              //api 4 and higher
              return value * 1.25;
         case DisplayMetrics.DENSITY_XHIGH
              //api 9 and higher
              return value * 2;
         case DisplayMetrics.DENSITY_TV
              //api 13 and higher
              return value * 1.33125;
    }
}

You can implement a helper method that you can use to request calculations based on the device's dpi.

Based on @MitulNakum answer from this qustion, do this:

//note that mdpi is the standard
float getAdjustedDimension(float value){
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    switch(metrics.densityDpi){
         case DisplayMetrics.DENSITY_LOW:
              //api 4 and higher
              return 0.75 * value;
         case DisplayMetrics.DENSITY_MEDIUM:
              //api 4 and higher
              return value;
         case DisplayMetrics.DENSITY_HIGH:
              //api 4 and higher
              return value * 1.25;
         case DisplayMetrics.DENSITY_XHIGH
              //api 9 and higher
              return value * 2;
         case DisplayMetrics.DENSITY_TV
              //api 13 and higher
              return value * 1.33125;
    }
}
千柳 2024-12-04 08:57:54

看看 AndEngine 的相机。你想要的一切都可以在那里找到,而且它是开源的!我已将此引擎用于许多游戏和原型应用程序。它有很好的记录。

AndEngine.org

源代码

Take a look at AndEngine's Cameras. Everything you are looking for can be found there, and it is open source! I have used this engine for a number of games and prototype apps. It is very well documented.

AndEngine.org

Source Code

瑶笙 2024-12-04 08:57:54

Android 支持的方式是为您的应用程序所需的不同尺寸的每个位图创建多个图像,并让应用程序决定在给定的屏幕密度下使用哪个图像。这些图像将放入drawable-ldpi、drawable-hdpi 等文件夹中。查看链接并仔细阅读: http://developer.android.com/guide/ Practices/screens_support.html

不过内存不太友好。 :(

The android supported way is by creating several images for each bitmap you need for your app of varying sizes and letting the app decide which to use for a given screen density. Those images would go in the drawable-ldpi, drawable-hdpi, etc, folders. Check out the link and read it closly: http://developer.android.com/guide/practices/screens_support.html

Not very memory friendly though. :(

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文