- ImageView
- Общая информация
- Метод setImageResource()
- Метод setImageBitmap()
- Метод setImageDrawable()
- Метод setImageURI()
- Другие методы
- Масштабирование через свойство Scale Type
- Атрибут android:adjustViewBounds=»true»
- Загрузка изображения из галереи
- Получить размеры ImageView — будьте осторожны
- Копирование изображений между ImageView
- Примеры
- Android: How to load Image from URL in ImageView?
- Project Description
- Environment Used
- Prerequisites
- Android Project
- strings.xml
- XML layout file
- Activity
- AndroidManifest.xml
- Output
- Project Folder Structure
- Как загрузить ImageView по URL-адресу в Android? [закрытый]
- 23 ответов
- Как загрузить ImageView по URL в Android?
ImageView
Общая информация
Компонент ImageView предназначен для отображения изображений. Находится в разделе Widgets.
Для загрузки изображения в XML-файле используется атрибут android:src, в последнее время чаще используется атрибут app:srcCompat.
ImageView является базовым элементом-контейнером для использования графики. Можно загружать изображения из разных источников, например, из ресурсов программы, контент-провайдеров. В классе ImageView существует несколько методов для загрузки изображений:
- setImageResource(int resId) — загружает изображение по идентификатору ресурса
- setImageBitmap(Bitmap bitmap) — загружает растровое изображение
- setImageDrawable(Drawable drawable) — загружает готовое изображение
- setImageURI(Uri uri) — загружает изображение по его URI
Метод setImageResource()
Сначала нужно получить ссылку на ImageView, а затем используется идентификатор изображения из ресурсов:
Метод setImageBitmap()
Используется класс BitmapFactory для чтения ресурса изображения в объект Bitmap, а затем в ImageView указывается полученный Bitmap. Могут быть и другие варианты.
Метод setImageDrawable()
Если у вас есть готовое изображение, например, на SD-карте, то его можно использовать в качестве объекта Drawable.
Drawable можно получить и из ресурсов, хотя такой код выглядит избыточным, если можно сразу вызвать setImageResource().
Метод setImageURI()
Берётся URI файла изображения и используется в качестве источника изображения. Этот способ годится для работы с локальными изображениями.
Загружаем Drawable через URI.
Другие методы
Также вам часто придется использовать методы, связанные с размерами и масштабированием: setMaxHeight(), setMaxWidth(), getMinimunHeight(), getMinimunWidth(), getScaleType(), setScaleType().
Масштабирование через свойство Scale Type
Для масштабирования картинки в ImageView есть свойство Scale Type и соответствующий ему атрибут android:scaleType и перечисление ImageView.ScaleType.
- CENTER
- CENTER_CROP
- CENTER_INSIDE
- FIT_CENTER
- FIT_START
- FIT_END
- FIT_XY
- MATRIX
Чтобы увидеть разницу между разными режимами, желательно использовать большую картинку, превосходящую по ширине экрана устройства. Допустим, у нас есть простенькая разметка:
Для наглядности я задал красный цвет для фона ImageView.
Режим android:scaleType=»center» выводит картинку в центре без масштабирования. Если у вас будет картинка большего размера, то края могут быть обрезаны.
Режим android:scaleType=»centerCrop» также размещает картинку в центре, но учитывает ширину или высоту контейнера. Режим попытается сделать так, чтобы ширина (или высота) картинки совпала с шириной (или высотой) контейнера, а остальное обрезается.
Режим android:scaleType=»centerInside» масштабирует картинку, сохраняя пропорции. Можно увидеть задний фон контейнера, если его размеры отличаются от размера картинки.
Режим android:scaleType=»fitCenter» (по умолчанию) похож на предыдущий, но может не сохранять пропорции.
Если выбрать режим android:scaleType=»fitStart», то картинка прижимается к левому верхнему углу и таким образом заполняет верхнюю половину контейнера.
Значение android:scaleType=»fitEnd» сместит картинку в нижнюю часть контейнера.
Режим android:scaleType=»fitXY» растягивает/сжимает картинку, чтобы подогнать её к контейнеру. Может получиться вытянутая картинка, поэтому будьте осторожны.
Последний атрибут android:scaleType=»matrix» вывел картинку без изменений в левом верхнем углу с обрезанными краями.
Атрибут android:adjustViewBounds=»true»
При использовании атрибута scaleType=»fitCenter» из предыдущего примера Android вычисляет размеры самой картинки, игнорируя размеры ImageView. В этом случае ваша разметка может «поехать». Атрибут adjustViewBounds заставляет картинку подчиниться размеру компонента-контейнера. В некоторых случаях это может не сработать, например, если у ImageView установлен атрибут layout_width=»0dip». В таком случае поместите ImageView в RelativeLayout или FrameLayout и используйте значение 0dip для этих контейнеров.
Загрузка изображения из галереи
Предположим, у вас есть на экране компонент ImageView, и вы хотите загрузить в него какое-нибудь изображение из галереи по нажатию кнопки:
Намерение ACTION_PICK вызывает отображение галереи всех изображений, хранящихся на телефоне, позволяя выбрать одно изображение. При этом возвращается адрес URI, определяющий местоположение выбранного изображения. Для его получения используется метод getData(). Далее для преобразования URI-адреса в соответствующий экземпляр класса Bitmap используется специальный метод Media.getBitmap(). И у нас появляется возможность установить изображение в ImageView при помощи setImageBitmap().
На самом деле можно поступить ещё проще и использовать метод setImageURI.
Сравните с предыдущим примером — чувствуете разницу? Тем не менее, приходится часто наблюдать подобный избыточный код во многих проектах. Это связано с тем, что метод порой кэширует адрес и не происходит изменений. Рекомендуется использовать инструкцию setImageURI(null) для сброса кэша и повторный вызов метода с нужным Uri.
В последних версиях системных эмуляторов два примера не работают. Проверяйте на реальных устройствах.
Получить размеры ImageView — будьте осторожны
У элемента ImageView есть два метода getWidth() и getHeight(), позволяющие получить его ширину и высоту. Но если вы попробуете вызвать указанные методы сразу в методе onCreate(), то они возвратят нулевые значения. Можно добавить кнопку и вызвать данные методы через нажатие, тогда будут получены правильные результаты. Либо использовать другой метод активности, который наступает позже.
Копирование изображений между ImageView
Если вам надо скопировать изображение из одного ImageView в другой, то можно получить объект Drawable через метод getDrawable() и присвоить ему второму компоненту.
Примеры
В моих статьях можно найти примеры использования ImageView.
Источник
Android: How to load Image from URL in ImageView?
Project Description
- In this tutorial, we will see how to load an image from URL into Android ImageView.
- For downloading the image from URL and loading it in ImageView, we use AsyncTask.
Environment Used
- JDK 6 (Java SE 6)
- Eclipse Indigo IDE for Java EE Developers (3.7.1)
- Android SDK 4.0.3 / 4.1 Jelly Bean
- Android Development Tools (ADT) Plugin for Eclipse (ADT version 20.0.0)
- Refer this link to setup the Android development environment
Prerequisites
Android Project
Create an Android project and name it as “ImageViewFromURL“.
strings.xml
Open res/values/strings.xml and replace it with following content.
XML layout file
This application uses XML layout file (main.xml) to display the ImageView.
Open main.xml file in res/layout and copy the following content.
Activity
In src folder, create a new Class and name it as “ImageViewFromURLActivity” in the package “com.theopentutorials.android.views” and copy the following code.
From Android 3.x Honeycomb or later, you cannot perform Network IO on the UI thread and doing this throws android.os.NetworkOnMainThreadException. You must use Asynctask instead as shown below.
- Whenever we need to perform lengthy operation or any background operation we can use Asyntask which executes a task in background and publish results on the UI thread without having to manipulate threads and/or handlers.
- In onCreate(), we create and execute the task to load image from url. The task’s execute method invokes doInBackground() where we open a Http URL connection and create a Bitmap from InputStream and return it.
- Once the background computation finishes, onPostExecute() is invoked on the UI thread which sets the Bitmap on ImageView.
Android includes two HTTP clients: HttpURLConnection and Apache HTTP Client.
For Gingerbread and later, HttpURLConnection is the best choice.
AndroidManifest.xml
Define the activity in AndroidManifest.xml file. To access internet from Android application set the android.permission.INTERNET permission in manifest file as shown below.
Output
Run your application
Project Folder Structure
The complete folder structure of this example is shown below.
Источник
Как загрузить ImageView по URL-адресу в Android? [закрытый]
Как вы используете изображение, на которое ссылается URL в ImageView ?
23 ответов
убедитесь, что у вас есть следующие разрешения установить в свой AndroidManifest.xml для доступа в интернет.
сначала вам нужно загрузить изображение
затем используйте Imageview.setImageBitmap для установки растрового изображения в ImageView
1. Пикассо позволяет без проблем загружать изображения в вашем приложении-часто в одной строке кода!
Использовать Gradle:
только одна строка кода!
2. скольжения библиотека загрузки и кэширования изображений для Android, ориентированная на плавную прокрутку
использовать Gradle в:
// для простого просмотра:
3. фреска — это мощная система для отображения изображений в Android приложения.Fresco заботится о загрузке и отображении изображений, поэтому у вас нет к.
Я написал класс, чтобы справиться с этим, поскольку это, похоже, повторяющаяся потребность в моих различных проектах:
UrlImageViewHelper заполнит ImageView с найденным изображением по URL.
образец сделает Изображение Google Поиск и загрузка/показать результаты асинхронно.
UrlImageViewHelper будет автоматически загрузите, сохраните и кэшируйте все URL-адреса изображения в BitmapDrawables. Дубликаты url не будут загружаться в память дважды. Битовая память управляется используя слабую справочную хэш-таблицу, так что как только изображение больше не будет используется вами, это будет мусор собранные автоматически.
в любом случае люди просят мой комментарий опубликовать его в качестве ответа. я отправляю.
Источник
Как загрузить ImageView по URL в Android?
Как вы используете изображение, на которое ссылается URL-адрес в ImageView ?
От разработчика Android :
Убедитесь, что в вашем AndroidManifest.xml установлены следующие разрешения для доступа в Интернет.
Сначала вам нужно загрузить изображение
Затем используйте Imageview.setImageBitmap для установки растрового изображения в ImageView
1. Picasso позволяет без проблем загружать изображения в ваше приложение – часто в одной строке кода!
Использовать Gradle:
Всего одна строка кода!
Многие распространенные ошибки загрузки изображений на Android автоматически обрабатываются Picasso
- Обработка утилиты ImageView и отмена загрузки в адаптере.
- Комплексные преобразования изображений с минимальным использованием памяти.
- Автоматическое кэширование памяти и дисков.
2. Glide. Библиотека загрузки изображений и кеширования для Android ориентирована на плавную прокрутку
Использовать Gradle:
// Для простого представления:
// Для простого списка изображений:
Я написал класс, чтобы справиться с этим, поскольку это, кажется, повторяющаяся потребность в моих различных проектах:
UrlImageViewHelper заполнит ImageView с изображением, которое находится по URL-адресу.
Образец будет выполнять поиск изображений Google и загрузить / показать результаты асинхронно.
UrlImageViewHelper автоматически загружает, сохраняет и кэширует все изображения, обращаясь к BitmapDrawables. Дублирующие URL-адреса не будут загружаться в память дважды. Память растрового изображения управляется с использованием слабой справочной хеш-таблицы, поэтому, как только изображение больше не будет использоваться вами, это будет автоматически собираться мусором.
В любом случае люди просят мой комментарий, чтобы опубликовать его в качестве ответа. Я отправляю сообщения.
Принятый ответ выше, если вы загружаете изображение на основе нажатия кнопки, однако, если вы делаете это в новом действии, он замораживает пользовательский интерфейс на секунду или два. Оглядевшись, я обнаружил, что простая асинтеза устраняет эту проблему.
Чтобы использовать asynctask, добавьте этот класс в конце вашей деятельности:
И вызов из метода onCreate (), используя:
Результатом является быстро загружаемая активность и изображение, которое отображается через несколько секунд позже в зависимости от скорости сети пользователя.
Вы также можете использовать это изображение LoadImageView для загрузки изображения с URL-адреса:
После того, как вы добавили файл класса из этой ссылки, вы можете создать экземпляр изображения с URL-адресами:
И обновите его, используя:
Недавно я нашел здесь поток, так как мне нужно сделать аналогичную вещь для списка с изображениями, но принцип прост, так как вы можете прочитать в первом примере, показанном там (by jleedev). Вы получаете входной поток изображения (из Интернета)
Затем вы сохраняете изображение как Drawable, и вы можете передать его в ImageView (через setImageDrawable). Опять же из верхнего фрагмента кода взгляните на весь поток.
Привет, у меня самый простой код, попробуйте это
Здесь много хорошей информации … Недавно я нашел класс под названием SmartImageView, который пока работает очень хорошо. Очень легко включать и использовать.
ОБНОВЛЕНИЕ : я закончил тем, что написал сообщение в блоге об этом , поэтому ознакомьтесь с его помощью по использованию SmartImageView.
2ND UPDATE : теперь я всегда использую Picasso для этого (см. Выше) и очень рекомендую его. 🙂
Лучшей современной библиотекой для такой задачи, по моему мнению, является Пикассо на площади. Он позволяет загружать изображение в ImageView по URL-адресам с помощью одного слоя:
Это поможет вам …
Определите изображение и загрузите изображение в него …..
Затем Определите этот метод:
Простой и чистый способ сделать это – использовать библиотеку с открытым исходным кодом Prime .
Этот код проверен, он полностью работает.
Работа с графическим изображением в любом контейнере, например, в виде сетки в виде списка, обычная компоновка
Версия с обработкой исключений и задачей async:
Попробуйте этот путь, надеюсь, что это поможет вам решить вашу проблему.
Здесь я расскажу о том, как использовать внешнюю библиотеку «AndroidQuery» для загрузки изображения с url / server в режиме asyncTask, а также загружать кэшированное изображение в файл устройства или область кеша.
- Загрузите библиотеку «AndroidQuery» здесь
- Скопируйте / Вставьте эту банку в папку проекта lib и добавьте эту библиотеку в путь сборки проекта
- Теперь я показываю демонстрацию того, как ее использовать.
activity_main.xml
MainActivity.java
Android Query может справиться с этим для вас и многое другое (например, прохождение кеша и загрузки).
Я думаю, что это лучший подход.
Это поздний ответ, как было предложено выше. AsyncTask будет и после того, как я AsyncTask немного, я нашел еще один способ для этой проблемы.
Я попробовал это сам, и у меня еще нет проблем.
Источник