在我的项目中,我正在将文件从drawable-hdpi文件夹中加载到ImageSwitcher
中,如下所示:
int[] images = new int[2];
logoImage = (ImageSwitcher) findViewById(R.id.logo_image);
images[0] = getResources().getIdentifier(ej.getImagemResource(), "drawable", getPackageName());
images[1] = getResources().getIdentifier(ej.getImagemResolvidaResource(), "drawable", getPackageName());
//...
logoImage.setImageResource(images[0]);
但是对于设计问题,因为它会像每个300 x 300像素的600个小图像我决定将它们全部放入assets文件夹并开始加载它们:
Drawable[] images = new Drawable[2];
images[0] = Drawable.createFromStream(getAssets().open(ej.getImagemResource() + ".png"), null);
images[1] = Drawable.createFromStream(getAssets().open(ej.getImagemResolvidaResource() + ".png"), null);
//...
问题在于,第二种方式根据设备密度(我猜)显示图像尺寸的方式非常不同,但是当图像进入drawable-hdpi文件夹时,它们在任何密度下都显示得很好。
我该如何解决这个问题?或者在drawable-hdpi文件夹中有600个图像有问题吗?哪个是'权利'这样做的方法?
提前致谢
答案 0 :(得分:5)
当您将位图放在drawable-<density>
文件夹中,并且设备的确切显示密度没有变体时,框架会根据<density>
与设备密度之间的比率自动缩放它。
这样做是为了使图像尺寸
从资源加载时,“源”密度未知,因此不执行此自动缩放。因此,差异。
如果您要从资产“加载图像”,就好像它是hdpi“,您可以执行以下操作:
Options opts = new BitmapFactory.Options();
opts.inDensity = DisplayMetrics.DENSITY_HIGH;
drawable = Drawable.createFromResourceStream(context.getResources(), null, is, srcName, opts);
也就是说,我没有看到将所有文件都包含在可绘制文件夹中的任何问题。