从 asset 文件夹加载的图像与 res/drawable 的大小不同

2024-03-12

在我的项目中,我将图像从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]);

但对于设计问题,因为它就像 60000 张小图像,每张 300 x 300 像素,我决定将它们全部放入资产文件夹中并开始加载它们,如下所示:

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文件夹时,它们在任何密度下都显示得很好。

我该如何解决这个问题?或者将60000张图像放入drawable-hdpi文件夹中是否存在问题?哪种方法是“正确”的?

提前致谢


当您将位图放入drawable-<density>文件夹,并且设备的确切显示密度没有变体,框架将考虑之间的比率自动缩放它<density>以及设备的密度。

这样做是为了图像尺寸,in dps,在设备之间保持不变(并且您没有义务为每种可能的密度提供变体)。

当您从资产加载时,“源”密度未知,因此不会执行此自动缩放。因此,存在差异。

如果你想从资源中加载图片“就好像它是 hdpi 一样”,你可以这样做:

Options opts = new BitmapFactory.Options();
opts.inDensity = DisplayMetrics.DENSITY_HIGH;
drawable = Drawable.createFromResourceStream(context.getResources(), null, is, srcName, opts);

也就是说,我认为将所有文件包含在可绘制文件夹中根本没有任何问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 asset 文件夹加载的图像与 res/drawable 的大小不同 的相关文章

随机推荐