我想我对图形问题有同样的经历:
从您的代码中,我猜您可能已经根据您在图像编辑器中看到的图像高度/宽度预先计算了“width_explosion”和“height_explosion”,并在不同的设备上使用了相同的值。
您列出的设备有两个不同的 DPI 值,如 Android 所知:240,或 MDPI (Galaxy S2) 和 120,或 LDPI (Galaxy Ace 和 Galaxy Y)。请注意,Galaxy S2 的 DPI 正好是 Ace 和 Y 的两倍。
Android 通过帮助应用程序作者处理图像来方便他们。当从资源中读取图像getDrawable
并准备好在屏幕上渲染时,Android会根据 160DPI调整图像的大小,以便在具有不同像素密度的屏幕上使用标尺测量它们的长度相同。例如,如果一个 128x128 像素的图像在 Galaxy S2 上是 2 厘米长和 2 厘米宽,那么在 Galaxy Ace 上它应该是 2 厘米长和 2 厘米宽。然而,为了覆盖 Galaxy S2 上更多的像素,在 Galaxy S2 上绘图时,它的大小调整为 192 x 192 像素,因为它的 DPI 正如 Android 系统所知是 240,是 ADP1(HTC Dream)的 DPI 的 1.5 倍。同样,在 Galaxy Ace 或 Galaxy Y 上,图像将被调整为 96 x 96。
不幸的是,中的源矩形canvas.drawImage
是指调整大小的位图中的像素数。这意味着代码示例中使用的相同源矩形在 Galaxy Y 上覆盖的像素是 Galaxy S2 上的 4 倍。我猜你在这个问题中描述的是“同一个精灵文件看起来像是在低 DPI 设备上被分割为 2x2,但它应该被分割为 4x4”。
以下示例说明了当我尝试使用具有不同 DPI 的设备复制您的问题时会发生什么。我不能发布图片,所以我把图片放在这里(这是我的博客):
http://edgeofmap.com/blog/2013/05/android-bitmap-over-devices-of-different-dpis/