Диалоговое окно Android Image / Popup того же размера, что и изображение, и без рамки

На данный момент я работаю над файловым браузером. Все работает отлично с одним исключением: если пользователь нажимает на изображение (jpg, png, bmp, ..), я хочу, чтобы изображение отображалось в диалоговом окне или всплывающее окно с таким же размером, что и изображение, так что Нет границ вообще. Файлы изображений расположены на SD-карте.

Вот что у меня есть до сих пор:

BitmapDrawable bitmap = new BitmapDrawable(context.getResources(), TARGET_PATH); AlertDialog.Builder imageDialog = new AlertDialog.Builder(context); LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.thumbnail, null); ImageView image = (ImageView) layout.findViewById(R.id.thumbnail_IMAGEVIEW); image.setImageDrawable(bitmap); imageDialog.setView(layout); imageDialog.create(); imageDialog.show(); 

Файл XML:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/thumbnail_IMAGEVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:contentDescription="@string/icon_DESCRIPTION" /> </RelativeLayout> 

Вот результат:

Ошибка выхода

На краях изображений есть уродливые границы – я не хочу, чтобы их показывали. Я пробовал много вещей и примеров, перечисленных в google и т. Д. – ничего не получилось.

Лучшим вариантом будет сделать диалог / представление позади изображения, того же размера, что и изображение. Другой способ – установить фон за прозрачным изображением.

Как мне найти решение? Мне бы хотелось сделать фон того же размера, что и изображение, поэтому нет «невидимого» материала, но я тоже буду в порядке с прозрачным вариантом.


Решение:

 // Get screen size Display display = context.getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int screenWidth = size.x; int screenHeight = size.y; // Get target image size Bitmap bitmap = BitmapFactory.decodeFile(TARGET); int bitmapHeight = bitmap.getHeight(); int bitmapWidth = bitmap.getWidth(); // Scale the image down to fit perfectly into the screen // The value (250 in this case) must be adjusted for phone/tables displays while(bitmapHeight > (screenHeight - 250) || bitmapWidth > (screenWidth - 250)) { bitmapHeight = bitmapHeight / 2; bitmapWidth = bitmapWidth / 2; } // Create resized bitmap image BitmapDrawable resizedBitmap = new BitmapDrawable(context.getResources(), Bitmap.createScaledBitmap(bitmap, bitmapWidth, bitmapHeight, false)); // Create dialog Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.thumbnail); ImageView image = (ImageView) dialog.findViewById(R.id.imageview); // !!! Do here setBackground() instead of setImageDrawable() !!! // image.setBackground(resizedBitmap); // Without this line there is a very small border around the image (1px) // In my opinion it looks much better without it, so the choice is up to you. dialog.getWindow().setBackgroundDrawable(null); // Show the dialog dialog.show(); 

XML-файл:

 <?xml version="1.0" encoding="utf-8"?> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/imageview" android:layout_width="match_parent" android:layout_height="match_parent" > </ImageView> 

Конечный результат:

Вывод

Вы можете создать пользовательский диалог для показа изображений, создать макет для раздувания в диалоговом окне setcontentview, взять один линейный макет с содержимым для обертки и ширины и изображения с ним с помощью свойства scale.

Используйте FrameLayout как родительский, а не RelativeLayout, и установите для wrap_content и 0 полей.

Пытаться:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" android:background="@color/background"> <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/frameLayout" android:background="#b2ff7c"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" android:src="@drawable/ic_launcher"/> </FrameLayout> </RelativeLayout> 

Результат должен быть тем же размером, что и ImageView.

Если это работает. Попробуйте изменить это в пользовательской теме:

  <style name="Widget.ImageWell"> <item name="android:background">@android:drawable/panel_picture_frame_background</item> </style> 

Измените свой ImageView:

 <ImageView android:id="@+id/thumbnail_IMAGEVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:contentDescription="@string/icon_DESCRIPTION" /> 

К этому:

 <ImageView android:id="@+id/thumbnail_IMAGEVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:adjustViewBounds="true" <!-- Here is the thing --> android:contentDescription="@string/icon_DESCRIPTION" /> 

Надеюсь это поможет.

У вас был установлен setType в ImageView?

<ImageView ... android:scaleType="fitXY" ... />

Intereting Posts
Recycliewiew мучительно медленно загружает кешированные изображения из Picasso Устройство оповещения обозревателя android parse, зарегистрированное несколько раз Как динамически обновлять ListView с помощью пользовательского адаптера? Отключить кластеризацию при максимальном уровне масштабирования с помощью android-maps-utils Создание Google TV AVD на окнах, не отвлекающих системный образ x86 RxJava – загрузка файлов последовательно – испускает следующий элемент, когда onNext вызывает Использование библиотеки HoloEverywhere Android: минимальный запас диалогов Никаких дополнительных функций в Activity.getIntent () при возврате к нему из дочернего объекта. Разрешить масштабирование Google-карт пальцами – PhoneGap для Android EditText с цифровой клавиатурой по умолчанию, но с буквенными символами Как использовать adb с genymotion на mac? Android Marshmallow на Nexus 6P не очищает внутреннюю память после удаления приложения Динамическая загрузка изображений R.Drawable с использованием переменной Android SDK и AVD Manager -Cant создать AVD в правильном месте файла