在一个简单的文字游戏应用程序中,我使用以下代码从PNG 图像条纹加载 26 个字母平铺图像:
private static final CharacterIterator ABC =
new StringCharacterIterator("ABCDEFGHIJKLMNOPQRSTUVWXYZ");
private static HashMap<Character, Bitmap> sImages =
new HashMap<Character, Bitmap>();
BitmapRegionDecoder decoder = null;
InputStream is = sContext.getResources()
.openRawResource(R.drawable.big_english);
try {
decoder = BitmapRegionDecoder.newInstance(is, false);
} catch (IOException ex) {
}
int h = decoder.getHeight();
Rect r = new Rect(0, 0, h, h);
for (char c = ABC.first();
c != CharacterIterator.DONE;
c = ABC.next(), r.offset(h, 0)) {
Bitmap bmp = decoder.decodeRegion(r, null);
sImages.put(c, bmp);
}
这在 Android 模拟器中运行良好:
但是在真正的 Moto G 设备上,字母太大(可能是 1.5 倍?当我打印时sContext.getResources().getDisplayMetrics().density
,出于某种原因得到 2.0):
同时,黄色方形瓷砖背景正确显示。
所有(big_tile.png和big_english.png和game_board.png)都是 PNG 图像 - 那么为什么有区别呢?
为什么会发生这种情况以及如何解决这个问题?
我应该使用inDensity
或任何其他BitmapFactory.Options吗?
或者是因为我的getResources().openRawResource()
电话 - 但改用什么?