Изображение, загруженное из папки ресурсов, имеет другой размер, чем res/drawable
В моем проекте я загружал изображения динамически из папки 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]);
но из-за проблем дизайна, так как это будет 600 маленьких изображений размером 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, они отображались просто отлично при любой плотности.
Как мне это решить? Или проблема в том, чтобы в папке drawable-hdpi было 600 сотен изображений? Какой "правильный" способ сделать это?
заранее спасибо
1 ответ
Когда вы помещаете растровое изображение в drawable-<density>
папка, и нет никакого варианта для точной плотности отображения устройства, структура будет автоматически масштабировать его, учитывая соотношение между <density>
и плотность устройства.
Это делается для того, чтобы размеры изображения в дпс оставались постоянными между устройствами (и чтобы вы не обязаны предоставлять вариант для каждой возможной плотности).
При загрузке из ресурсов плотность "источника" неизвестна, поэтому автоматическое масштабирование не выполняется. Отсюда и разница.
Если вы хотите загрузить изображение из ресурсов "как в формате hdpi", вы можете сделать что-то вроде:
Options opts = new BitmapFactory.Options();
opts.inDensity = DisplayMetrics.DENSITY_HIGH;
drawable = Drawable.createFromResourceStream(context.getResources(), null, is, srcName, opts);
Тем не менее, я не вижу никаких проблем с включением всех файлов в папки для рисования.