Изображение из файла расширения Android выглядит слишком маленьким
Я нахожусь в процессе реализации файлов расширения для моего приложения для Android.
До сих пор я поместил несколько изображений и аудиофайлов в основной файл расширения (я не использую файл расширения патча). Ни один из файлов не был сжат.
Через приложение я могу скачать файл расширения и без проблем воспроизводить аудиофайлы. Одновременно воспроизводится аудиофайл в файле расширения, я также отображаю изображение из файла расширения. Тем не менее, изображение значительно меньше, чем я ожидал.
Изображение 320x400px. Перед реализацией файлов расширения он отображался в моем приложении, как и ожидалось. Тем не менее, после реализации это выглядит так, как будто изображение уменьшилось до 50 пикселей в ширину (высота уменьшилась пропорционально).
Затем я попробовал решение, предложенное в разделе Как создать рисованный объект из потока без изменения его размера. Несмотря на то, что изображение выглядит немного больше, оно все равно намного меньше того, что я хочу (похоже, теперь оно размером около 100x125 пикселей). В настоящее время мой код для отображения изображения выглядит так:
public void displayImageFromExpansionFile(){
Bitmap b = BitmapFactory.decodeStream(fileStream);
b.setDensity(Bitmap.DENSITY_NONE);
Drawable d = new BitmapDrawable(this.getResources(), b);
imageToDisplay.setImageDrawable(d);
}
public void showImg(int imgNum){
switch(imgNum){
case(1):
try{
if((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL){
fileStream = expansionFile.getInputStream("filepath inside expansion file for small image");
}
else if((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL){
fileStream = expansionFile.getInputStream("filepath inside expansion file for normal image");
}
else if((getResources().getConfiguration().screenLayout &
Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE){
fileStream = expansionFile.getInputStream("filepath inside expansion file for large image");
}
else{
fileStream = expansionFile.getInputStream("filepath inside expansion file for xlarge image");
}
displayImageFromExpansionFile();
} catch (Exception e) {
e.printStackTrace();
}
break;
// more cases here
}
По-прежнему кажется, что изображение не отображается в его реальном размере. Когда я рассматриваю изображение внутри файла расширения, я вижу, что оно все еще имеет размер 320x400px. Тем не менее, приложение не отображает изображение в этих размерах.
Что я могу сделать, чтобы приложение отображало изображение в правильных размерах?
Спасибо!
---ОБНОВИТЬ---
Я также попробовал код ниже, без разницы в результатах. Он по-прежнему выглядит примерно в 100x125 пикселей, а не в 320x400 пикселей, как его первоначальный размер.
public void displayImageFromExpansionFile(int bWidth, int bHeight){
BitmapFactory.Options bfo = new BitmapFactory.Options();
bfo.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap b = BitmapFactory.decodeStream(fileStream, null, bfo);
b.setDensity(Bitmap.DENSITY_NONE);
imageToDisplay.setImageBitmap(b);
}
Единственное, что до сих пор работало Bitmap.createScaledBitmap(b, bWidth, bHeight, true);
На моем телефоне удвоение исходных размеров изображения (до 640x800 пикселей) с использованием вышеуказанного метода приводит к увеличению ожидаемого размера изображения, но я бы предположил, что изображение может отображаться в разных размерах на разных телефонах (возможно, из-за плотности / размера экрана).). Когда я попытался удвоить размеры большого изображения и просмотреть его на своем планшете, изображение оказалось больше, чем должно.
2 ответа
В конце концов, я возился с файлом макета XML, в котором отображалось сжатое изображение. Я изменил атрибуты imageView так:
Ширина / Высота: fill_parent (оба)
Тип шкалы: fitCenter
Теперь изображения немного больше, чем я первоначально ожидал, но я думаю, что так это выглядит лучше. И теперь изображения имеют постоянный размер. Задача решена!
Если у кого-то есть проблемы с тем, что я испытываю, надеюсь, это поможет.
Это сработало для меня:
public static Bitmap getBitmapExt(Context context, String name){
Bitmap bitmap = null;
try {
if(expansionFile == null){
PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
expansionFile = APKExpansionSupport.getAPKExpansionZipFile(context, pInfo.versionCode, 0);
}
InputStream is = expansionFile.getInputStream("images/" + name + ".png");
bitmap = BitmapFactory.decodeStream(is);
}
catch (Exception e){
e.printStackTrace();
}
return bitmap;
}
https://gist.github.com/uebi-belli/3c07323c8055a3b66ccac0d388b2b013
Надеюсь, что поможет =)