【发布时间】:2014-11-12 17:42:57
【问题描述】:
在a simple word game app 中,我使用以下代码从PNG-image stripe 加载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):
同时the yellow square tile backround显示正确。
所有(big_tile.png 和 big_english.png 和 game_board.png)都是 PNG 图像 - 那为什么会有区别?
为什么会发生这种情况以及如何解决这个问题?
我是否应该使用inDensity 或任何其他BitmapFactory.Options?
或者是因为我的getResources().openRawResource() 调用 - 但改用什么?
【问题讨论】:
-
不同的屏幕分辨率?
-
是的,但是黄色方形瓷砖背景显示正确。两者(big_tile.png 和 big_english.png)都是 PNG 图像 - 那么为什么会有区别呢?
-
将 R.drawable.big_english 放到 drawable-nodpi 文件夹中
-
但我不想在较小的 Android 设备上浪费内存。 res/drawable-xxhdpi/big_english.png 是 6240 x 240 像素。我想在低端设备上使用更小的
res/drawable-ldpi/big_english.png。 -
你是把所有的图片都放在只Drawable文件夹里还是放在所有mdpi、hdpi、xhdpi、xxhdpi文件夹里?
标签: android bitmap bitmapfactory android-bitmap bitmapregiondecoder