Android не выводит изображение

Android. Вывод изображений, различные способы

Эта статья будет полезна начинающим разработчикам, здесь я предложу несколько вариантов вывода изображений на Android. Будут описаны следующие способы:

Обычный метод – стандартный способ, используя ImageView. Рассмотрены варианты загрузки картинки из ресурса, а также из файла на SD карте устройства.

Продвинутый вариант — вывод изображения, используя WebView. Добавляется поддержка масштабирования и прокрутки картинки при помощи жестов.

“Джедайский” способ – улучшенный предыдущий вариант. Добавлен полноэкранный просмотр с автоматическим масштабированием изображения при показе и поддержкой смены ориентации устройства.

Исходники тестового проекта на GitHub github.com/Voldemar123/andriod-image-habrahabr-example

В этой статье я не рассматриваю вопросы загрузки изображений из Интернета, кеширования, работы с файлами и необходимых для работы приложения permissions – только вывод картинок.

Итак, задача — предположим, в нашем приложении необходимо вывести изображение на экран.
Картинка может размерами превышать разрешение экрана и иметь различное соотношение сторон.
Хранится она либо в ресурсах приложения, либо на External Storage — SD карте.

Также допустим, мы уже записали на карту памяти несколько изображений (в тестовом проекте – загружаем из сети). Храним их в каталоге данных нашего приложения, в кеше.

public static final String APP_PREFS_NAME = Constants.class.getPackage().getName();
public static final String APP_CACHE_PATH =
Environment.getExternalStorageDirectory().getAbsolutePath() +
«/Android/data/» + APP_PREFS_NAME + «/cache/»;

Layout, где выводится картинка

android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:orientation=»vertical» >

Масштабирование по умолчанию, по меньшей стoроне экрана.
В Activity, где загружаем содержимое картинки

private ImageView mImageView;
mImageView = (ImageView) findViewById(R.id.imageView1);

Из ресурсов приложения (файл из res/drawable/img3.jpg)

Задавая Bitmap изображения

FileInputStream fis = new FileInputStream(Constants.APP_CACHE_PATH + this.image);
BufferedInputStream bis = new BufferedInputStream(fis);

Bitmap img = BitmapFactory.decodeStream(bis);

Или передать URI на изображение (может хранится на карте или быть загружено из сети)

mImageView.setImageURI( imageUtil.getImageURI() );
Uri.fromFile( new File( Constants.APP_CACHE_PATH + this.image ) );

Этот способ стандартный, описан во множестве примеров и поэтому нам не особо интересен. Переходим к следующему варианту.

Предположим, мы хотим показать большое изображение (например фотографию), которое размерами превышает разрешение нашего устройства. Необходимо добавить прокрутку и масштабирование картинки на экране.

android:layout_width=»match_parent»
android:layout_height=»match_parent»
android:orientation=»vertical» >

В Activity, где загружаем содержимое

protected WebView webView;
webView = (WebView) findViewById(R.id.webView1);

установка черного цвета фона для комфортной работы (по умолчанию – белый)

включаем поддержку масштабирования

больше места для нашей картинки

webView.setPadding(0, 0, 0, 0);

полосы прокрутки – внутри изображения, увеличение места для просмотра

загружаем изображение как ссылку на файл хранящийся на карте памяти

webView.loadUrl(imageUtil.getImageFileLink() );
«file:///» + Constants.APP_CACHE_PATH + this.image;

Теперь мы хотим сделать так, чтобы картинка при показе автоматически масштабировалась по одной из сторон, при этом прокрутка остается только в одном направлении.
Например, для просмотра фотографий более удобна ландшафтная ориентация устройства.
Также при смене ориентации телефона масштаб изображения должен автоматически меняться.
Дополнительно расширим место для просмотра изображения на полный экран.

В AndroidManifest.xml для нашей Activity добавляем

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

@Override
public void onConfigurationChanged(Configuration newConfig) <
super.onConfigurationChanged(newConfig);
changeContent();
>

В приватном методе описана логика пересчета масштаба для картинки
Получаем информацию о размерах дисплея. Из-за того, что мы изменили тему Activity, теперь WebView раскрыт на полный экран, никакие другие элементы интерфейса не видны. Видимый размер дисплея равен разрешению экрана нашего Android устройства.

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();

Читайте также:  Андроид не работают исходящие вызовы

int width = display.getWidth();
int height = display.getHeight();

Размеры изображения, выбранного для показа

Bitmap img = imageUtil.getImageBitmap();

int picWidth = img.getWidth();
int picHeight = img.getHeight();

Меняем масштаб изображения если его высота больше высоты экрана. Прокрутка теперь будет только по горизонтали.

if (picHeight > height)
val = new Double(height) / new Double(picHeight);

Подбрасываем в WebView специально сформированный HTML файл, содержащий изображение.

webView.loadDataWithBaseURL(«/»,
imageUtil.getImageHtml(picWidth, picHeight),
«text/html»,
«UTF-8»,
null);

StringBuffer html = new StringBuffer();

Такой способ я применил из-того, что после загрузки изображения в WebView через метод loadUrl, как в прошлом варианте, setInitialScale после поворота устройства не изменяет масштаб картинки. Другими словами, показали картинку, повернули телефон, масштаб остался старый. Очень похоже на то, что изображение как-то кешируется.

Я не нашел в документации упоминания об этом странном поведении. Может быть местные специалисты скажут, что я делаю не так?

Источник

Галерея не показывает изображения SD-карты! Как это исправить? [Советы по MiniTool]

Gallery Not Showing Sd Card Pictures

Резюме :

Галерея — это полезное приложение для просмотра фотографий, которые вы сделали и сохранили на своем устройстве и на SD-карте. Однако иногда изображения, хранящиеся на вашей SD-карте, могут не отображаться в галерее. Прочтите этот пост сейчас, чтобы узнать о решениях, позволяющих исправить эту галерею, не отображающую проблему с изображениями SD-карты эффективно.

Быстрая навигация:

Часть 1: Галерея не показывает изображения SD-карты!

В Галерея обычно это место, где пользователь Android находит ранее сделанные фотографии. Многие пользователи Android обычно хранят данные на внешней SD-карте в дополнение к хранилищу телефона. Однако иногда изображения на SD-карте не отображаются в галерее.

А теперь давайте посмотрим на истинный случай:

Я использую глобальную прошивку для разработчиков MIUI 6.4.14 (Lollipop) за последние два дня. У меня с этим постоянно возникают проблемы. В приложении галереи не отображаются фотографии, хранящиеся на внешней SD-карте> DCIM> Папка камеры. Пытался переместить эту папку камеры на компьютер, затем щелкнул несколько фотографий (сохраненных на внешней SD-карте), а затем переместил эти фотографии с ПК на мобильный. После этого приложение галереи какое-то время показывало все эти фотографии, но после перезагрузки оно снова перестало показывать все эти фотографии из папки камеры внешней SD-карты. Источник: miui.com

Столкнувшись с этой ситуацией, вы начнете задаваться вопросом: а где мои фотографии? Они потерялись? Если да, как мне показать изображения SD-карты в галерее? Затем вы можете обратиться за ответами в Интернет.

Как видите, это обычная проблема для многих пользователей Android. В связи с популярностью этого мероприятия мы решили представить некоторые доступные решения, а также некоторые бесплатное программное обеспечение для восстановления данных в этом посте. Надеюсь, они вам пригодятся.

Часть 2: Как исправить ошибку в галерее, не отображающей изображения SD-карты

Мы суммируем четыре доступных решения для отображения изображений SD-карты в галерее следующим образом. Вы можете попробовать их один за другим.

Решение 1. Перезагрузите устройство Android.

Когда изображения не отображаются в галерее Android, вы можете сначала попробовать перезагрузить Android-устройство. После этого проверьте, отображаются ли исчезнувшие изображения на SD-карте Android в приложении Галерея. Если ответ отрицательный, попробуйте следующее решение.

Решение 2. Повторно вставьте SD-карту Android

Вот безопасный способ удалить SD-карту из устройства Android:

  1. Идти к Хранилище> Отключить SD-карту чтобы отключить SD-карту Android и затем выключить устройство Android.
  2. Извлеките SD-карту из телефона Android. Через несколько минут снова вставьте SD-карту в устройство Android.
  3. Переустановите карту памяти, чтобы ее можно было прочитать. Теперь вы можете проверить, можно ли просматривать изображения на SD-карте в приложении Галерея.

Если это решение не работает, попробуйте решение 3.

Решение 3. Удалите файлы Nomedia на SD-карте.

Что касается этого решения, вы должны убедиться, что на вашей SD-карте нет файла .nomedia. Если медиа-сканер обнаружит этот файл .nomedia, все данные в этой папке не будут отображаться в приложении Android Gallery.

Читайте также:  Android tv home mod apk

Итак, вы должны проверить, есть ли файлы .nomedia, и удалить их, если они есть.

Решение 4. Отформатируйте SD-карту Android

Вам следует использовать это решение, когда все вышеперечисленные решения не помогли.

Это решение можно разделить на два случая:

Случай 1: данные на SD-карте могут отображаться на вашем компьютере

Форматирование SD-карты приведет к удалению всех файлов на ней, поэтому сначала необходимо создать резервную копию SD-карты на своем компьютере.

Шаг 1. Создайте резервную копию данных с SD-карты Android на свой компьютер.

Один из способов резервного копирования данных на SD-карту — использовать Копировать + Вставить команды. Однако, чтобы легко скопировать много больших файлов на SD-карту, вы должны использовать Копировать раздел функция MiniTool Partition Wizard.

Но если на SD-карте Android много больших файлов, вы можете использовать Копировать раздел Функция MiniTool Partition Wizard позволяет с легкостью выполнить эту работу.

Эта функция доступна в бесплатной версии этой программы, поэтому загрузите и установите ее на свой компьютер, чтобы попробовать.

Но в некоторых случаях фотографии на SD-карте Android не могут быть прочитаны компьютером. В этой ситуации вы можете обратиться к этому посту, чтобы сделать фотографии на SD-карте, которые будут отображаться на вашем компьютере: Как решить — фотографии на SD-карте не отображаются на компьютере .

Шаг 2. Отформатируйте SD-карту Android, чтобы вернуть ее в нормальное состояние.

Конечно, вы можете отформатировать целевую SD-карту Android в Проводнике Windows или Управлении дисками. В то же время вы также можете использовать сторонний менеджер разделов — MiniTool Partition Wizard для упрощения форматирования с помощью Форматировать раздел характерная черта.

Шаг 3. Переместите скопированные данные на SD-карту Android.

Здесь вы все еще можете использовать MiniTool Partition Wizard и его Копировать раздел функция.

После этих трех простых шагов повторно вставьте SD-карту в устройство Android и проверьте, могут ли фотографии с SD-карты отображаться в приложении «Галерея». В общем, если с SD картой все в порядке, то нормально работать будет.

Источник

Не отображаются изображения в ImageView

В среде разработки, во вкладке Design в AndroidStudio показывает изображение, но при запуске почему то нет, не могу понять почему. Изображение с расширением .png Название icon_like , icon_view , icon_dis_like . Они хранятся в папке res/drawble .

1 ответ 1

tools:srcCompat=»@drawable/icon_like» — пространство имён tools ( http://schemas.android.com/tools ) как раз таки и обозначает, что параметр указан только для среды разработки и не будет включён в сборку.
Стандартные параметры задаются с android: .
Атрибут srcCompat принадлежит библиотеке поддержки. Для его использования нужно добавить пространство имён http://schemas.android.com/apk/res-auto :

Я как-то не в курсе для чего нынче используют библиотечный srcCompat , но простую картинку можно задать стандартным android:src

Всё ещё ищете ответ? Посмотрите другие вопросы с метками android или задайте свой вопрос.

Похожие

Подписаться на ленту

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2021 Stack Exchange Inc; материалы пользователей предоставляются на условиях лицензии cc by-sa. rev 2021.12.3.40888

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Источник

Отображение изображения в Android Studio, но не на телефоне

Как вы можете видеть ниже, это показывает Android Studio:

Однако, когда я запускаю это приложение на своем телефоне, просмотр списка показывает только пустое изображение (т.е. пробел) над ним, где должно находиться “где-то над радугой”.

Режим просмотра отлично работает. Он состоит из одного изображения и двух текстовых представлений. (Это представление изображения работает, если оно помогает). Если что-то из этого возможно вмешивается, я отправлю код здесь, но мне трудно поверить.

Единственное, о чем я не знал, – это использовать относительный вид при определении ячеек для представления списка в отдельном XML файле. Я не понимаю, почему нет, но это единственное, о чем я мог подумать.

Читайте также:  Нфс карбон для андроида

В основном Android-студия показывает все, что работает, но на телефоне/эмуляторе это не так. Следовательно, мне очень трудно найти проблему.

Я новичок в сценарии разработки Android, поэтому легко на меня.

ИЗМЕНИТЬ

Изображение имеет формат .png и находится в папке с возможностью перемещения. У меня также есть другое .png изображение в папке с возможностью переноса, которая, похоже, не вызывает проблем. Почему это так? Исходное изображение явно не повреждено, поскольку оно отображается в Android Studio

Решение

При перемещении изображения в папку “mipmap-xxhdpi” из-за размера

Сегодня я нашел такую ​​же проблему. Поэтому сначала проверьте высоту и ширину изображения и на основе этого поместите изображение в другую папку. i.e Если размер изображения составляет 1280 x 840, чем положить изображение в папку drawable-xxhdpi.

Я наткнулся на ту же проблему и нашел ответ ниже:
(Источник: qaru.site/questions/378674/…)

Что я сделал, чтобы заставить его работать, – изменить назначенный автоматический ключ (заполненный с помощью Drag/Drop ImageView) с app:srcCompat=»@drawable/logo» до android:src=»@drawable/logo» на вкладке “Текст”, чтобы он отображался как на эмуляторе, так и на устройстве, например

Недавно у меня был такой же вопрос, можете ли вы проверить, в какой папке он находится. Для меня проблема заключалась в том, чтобы поместить его в папку с возможностью переноса, в то время как он должен быть drawable-nodpi

Также укажите, какое устройство вы видите эту проблему, это несколько устройств?

Вот соответствующие ответы.

Я могу подтвердить, что размещение больших изображений в более высокой папке HDPI работает на Samsung Galaxy S4 при просмотре изображений.

Проблема была в том, что доступная папка для более высокого HDPI не существовала.
Но если вы создадите новую папку и назовите ее drawable-xxhdpi или
drawable-(whateverxxxhdpi) , поместите его в [path to your project folder]\app\src\main\res\ , затем разместите свое изображение там, оно должно работать.

Был задан более ранний дублированный вопрос (у меня недостаточно очков, чтобы поставить флаг выше, как дубликат) здесь, а предложение Лукапа о том, папка drawable-hdpi работала для меня. По-видимому, использование стандартных трех папок (-hdpi, -mdpi, -ldpi) было стандартной практикой.

Помещение изображения в любую из папок mipmap также работало для меня (а затем, конечно, меняя android:src=»https://techarks.ru/qa/android/otobrazhenie-izobrazheniya-v-an-F3/@drawable/image» на android:src=»https://techarks.ru/qa/android/otobrazhenie-izobrazheniya-v-an-F3/@mipmap/image» ), страницу разработчика Android для Ресурсы приложений говорит, что ресурсы mipmap предназначены для “Жестких файлов для разных размеров значков пусковой установки”. Таким образом, размещение изображений, отличных от значков запуска в папке mipmap, кажется, работает, но не соответствует соглашениям Android.

Мне кажется, что ошибка для изображения не отображается, когда в единственной доступной доступной папке/папке, поскольку другие рекомендуют использовать выпадающую папку для всех изображений, которые не являются значками приложений. На странице “Разработчик Android” для “Предоставление ресурсов” есть раздел, в котором обсуждается подход, который Android использует для выбора наилучших подходящих ресурсов, используя пример, в котором несколько доступны доступные ресурсы.

Чтобы продемонстрировать, как Android выбирает альтернативный ресурс, предположим, что следующие доступные каталоги содержат разные версии одинаковые изображения:

вытяжка/
рисую-о/
рисуем-фр-РКА/
рисуем-ан-порт/
рисуем-ан-NoTouch-12key/
рисуем-порт-ldpi/
drawable-port-notouch-12key/

И предположим, что устройство Конфигурация:

Локаль = en-GB
Ориентация экрана = порт
Плотность пикселей экрана = hdpi
Сенсорный экран = notouch
Метод ввода основного текста = 12key

Сравнивая конфигурацию устройства с доступной альтернативой ресурсов, Android выбирает чертежи из drawable-en-port.

Если есть только одна папка с возможностью вырезания/выбора, вы можете подумать, что “логика” андроида будет выбирать единственный доступный ресурс, который можно использовать.

если вы используете android:src или app:srcCompat вместо android:background :

У меня была эта проблема, и я решил ее, добавив это в свой код imageView xml

У меня была похожая проблема. мое изображение отображалось на изображении, но не отображалось на моем устройстве Android…

Источник

Оцените статью