【问题标题】:Density: Game looks the same on every screen-size密度:游戏在每个屏幕尺寸上看起来都一样
【发布时间】:2014-12-29 11:06:42
【问题描述】:

我的 Android 应用程序和不同的屏幕尺寸有点问题。 我希望我的游戏在每个屏幕上看起来都一样,但我使用静态 px 值来适应我的手机(HTC one m7、1080x1920、468 dpi)。

标题的代码如下所示:

canvas.drawBitmap(header, null, new Rect(0,0,1080,200), null);

现在我希望它适合每个屏幕。我阅读了一些使用 dp 的教程(这是我想要和需要的吗?),但它们都没有奏效。还是我只是使用了错误的计算?

或者我必须与 f.E. 合作吗? 1/7*宽度等等...

感谢您的时间和帮助。

【问题讨论】:

  • @Simon,那个链接实际上对他想做的事情没用,他正在使用画布。
  • @StephanBranczyk 为什么它没用?我一直在 onMeasure() 方法等的自定义视图中使用 DP,所需的像素计数存储在类字段中。一旦你了解了这个系统,就很容易了。
  • 他正在使用 Canvas 制作游戏。在 Canvas 上绘图比制作自定义视图更复杂。除了包含 Canvas 的 FrameLayout 之外,android 布局系统和随之而来的大多数最佳实践并不真正适用于他的案例。

标签: android dpi screen-size


【解决方案1】:

无论哪种方式,您都可以使用 dp(与密度无关的像素)或 px,但您可以在运行时自行测量所有内容。

由于您显然没有使用 Android 的内置布局类,因此您确实必须自己测量所有内容。

是的,我的意思是你必须“使用 f.E. 1/7*width 等等......”。只是不要假设宽度是多少,在运行时确定宽度。

【讨论】:

    【解决方案2】:

    您可以在各种值文件夹中创建integer.xml,并根据需要使用值(0,0,1080,200)。例如

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer name="leftwidth">0</integer>
    <integer name="rightwidth">0</integer>
    <integer name="topwidth">1080</integer>
    <integer name="bottomwidth">200</integer>
    </resources>
    

    现在你可以通过调用来获取这些值:

    canvas.drawBitmap(header, null, new Rect(getResources().getInteger(R.integer.leftwidth),getResources().getInteger(R.integer.rightwidth),getResources().getInteger(R.integer.topwidth),getResources().getInteger(R.integer.bottomwidth)), null);
    

    【讨论】:

    • 为什么不呢?我刚刚向他展示了另一种解决问题的方法。 @StephanBranczyk
    • 他特定手机的硬编码值不适用于其他尺寸的手机屏幕。此外,高度的值可以根据状态栏和主导航按钮而改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多