- Android. Вывод изображений, различные способы
- Галерея не показывает изображения SD-карты! Как это исправить? [Советы по MiniTool]
- Резюме :
- Быстрая навигация:
- Часть 1: Галерея не показывает изображения SD-карты!
- Часть 2: Как исправить ошибку в галерее, не отображающей изображения SD-карты
- Решение 1. Перезагрузите устройство Android.
- Решение 2. Повторно вставьте SD-карту Android
- Решение 3. Удалите файлы Nomedia на SD-карте.
- Решение 4. Отформатируйте SD-карту Android
- Не отображаются изображения в ImageView
- 1 ответ 1
- Всё ещё ищете ответ? Посмотрите другие вопросы с метками android или задайте свой вопрос.
- Похожие
- Подписаться на ленту
- Отображение изображения в Android Studio, но не на телефоне
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:
- Идти к Хранилище> Отключить SD-карту чтобы отключить SD-карту Android и затем выключить устройство Android.
- Извлеките SD-карту из телефона Android. Через несколько минут снова вставьте SD-карту в устройство Android.
- Переустановите карту памяти, чтобы ее можно было прочитать. Теперь вы можете проверить, можно ли просматривать изображения на SD-карте в приложении Галерея.
Если это решение не работает, попробуйте решение 3.
Решение 3. Удалите файлы Nomedia на SD-карте.
Что касается этого решения, вы должны убедиться, что на вашей SD-карте нет файла .nomedia. Если медиа-сканер обнаружит этот файл .nomedia, все данные в этой папке не будут отображаться в приложении Android Gallery.
Итак, вы должны проверить, есть ли файлы .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…
Источник