【问题标题】:How to draw full 800 by 480 images on Android如何在 Android 上绘制完整的 800 x 480 图像
【发布时间】:2010-12-23 10:04:16
【问题描述】:

我有一张 800 x 300 的图像,我知道这是我的测试平台分辨率的宽度(HTC Desire 为 800x480)。当我尝试将此图像绘制到屏幕上时,它会奇怪地缩放。它溢出屏幕的左侧并填充几乎所有垂直方向。

我正在使用这样的代码:

canvas.drawBitmap(screen[1], new Rect(0,0,800,300), new Rect(0,0,800,300), null);

由于某种原因

width_x = canvas.getWidth();

width_y = canvas.getHeight();

报告我的分辨率为 533 x 320。现在我假设这是 expletive-deleted android 使用的迷人缩放系统,因此应用在所有手机上的大小都相同,但我想忽略这一点。我正在编写一个游戏,所以想自己处理缩放和定位 - 例如,如果可用的话,使用更多的屏幕空间。最佳 android 实践可能适用于基于图标的应用程序,但我想绘制到绝对像素位置,并获取屏幕的绝对分辨率信息。

因此我的问题是——这绝对不可能吗?如果它是完全禁忌的,因为 android 有一个简单而有效的系统来执行此操作,那么我很想知道它是什么。 dpi 与我的游戏设计无关(就像这是一个 pc 游戏一样,它是无关紧要的)

除非我以某种方式指定分辨率,否则也许我的屏幕实际上是 533 x 320?我尝试使用宽度和高度的缩放值,并且图像在屏幕上的大小大致正确,但由于发生了某种缩放,所以边缘呈锯齿状。因此,我无法访问我的屏幕能够显示的所有像素。

为了缩放它,我使用了类似的东西

canvas.drawBitmap(screen[1], new Rect(0,0,800,300), new Rect((int)(0.0f),(int)(0.0f),(int)(533.0f),(int) (187.5f)),空); // 刚刚输入用于测试的数字 - 比率相当于报告的屏幕分辨率。看起来很可怕

非常感谢任何帮助。

干杯,

罗宾。

【问题讨论】:

    标签: android screen-resolution


    【解决方案1】:

    Android 没有做任何事情来扰乱您感知的分辨率 - 您正在使用 800x480 像素来处理该 Desire。

    您是否在全屏、自定义视图和覆盖 onDraw 中工作?你在使用 SurfaceView 吗?在帮助您解决问题之前,我们需要了解这些信息。

    假设您正在执行上述操作,您应该能够使用Canvas.drawBitmap(Bitmap bitmap, float left, float top, Paint paint) 将位图绘制到屏幕上而无需进行任何缩放。在您的情况下,将其放在画布的左上角看起来类似于 canvas.drawBitmap( screen[1], 0.0f, 0.0f, null);

    在性能敏感的应用程序(如游戏)中,您不希望在绘制循环期间使用源/目标 Rect 版本的 drawBitmap(),因为它会在循环的每次迭代期间进行缩放。相反,将原始位图的缩放/裁剪版本绘制到另一个成员位图,并使用上面链接的 drawBitmap 的 x/y 偏移版本在循环中绘制那个。

    如果你想知道你正在使用的屏幕空间的数量(如果你正在做任何自定义绘图,你肯定应该知道),你会想要覆盖 onSizeChanged()surfaceChanged(),取决于实施。

    你真的应该看看API demos,那里有一些很好的例子,说明如何在里面做你想做的事情。

    祝你好运!

    【讨论】:

      【解决方案2】:

      感谢您的回复。我修复了我的一个问题——在清单文件中,我的目标操作系统设置不正确——将其切换为 4(即 1.6)似乎可以修复我得到的高度和宽度值,至少对于 HTC 而言。模拟器问题更大,但至少它是朝着正确方向迈出的重要一步。为了您的信息,我正在全屏、横向模式(固定)下工作,几乎所有东西都具有覆盖功能。 (包括onDraw、surfaceChanged等)

      如果我可以获得绝对宽度和高度,我可以编写自己的代码来加载正确的资源并使用正确的缩放比例来定位屏幕 - dpi 不是问题,因此希望不会偏离建议的准则太远.

      也感谢有关绘制位图以提高速度的提示 - 这是非常方便的信息。你碰巧知道这个命令吗?我没有注意到 canvas.drawBitmap 具有将数据发送到另一个位图的重载。

      非常感谢您的帮助,当然,圣诞节快乐! (或您个人选择的宗教/世俗假期)

      干杯,

      罗宾。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-06
        • 2014-03-30
        • 2017-07-05
        • 2012-11-24
        • 2011-01-12
        相关资源
        最近更新 更多