Android studio очистить imageview

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.

Источник

Как очистить ImageView в Android?

Я повторно использую ImageView для своих дисплеев, но в какой-то момент у меня нет значений для его ввода.

Итак, как очистить ImageView в Android?

Ни один из них не очистил вид, он все еще показывает предыдущее изображение.

17 ответов

У меня была аналогичная проблема, когда мне нужно было полностью удалить ImageViews с экрана. Некоторые ответы здесь привели меня в правильном направлении, но в конечном итоге вызов setImageDrawable () сработал для меня:

(Как упоминалось в комментарии, такое использование задокументировано в официальных документах: ImageView # setImageDrawable.)

Я знаю, что это устарело, но мне удалось это сделать с помощью

Не похоже, что он должен работать, но я попробовал его по прихоти, и он отлично сработал.

Похоже, что вам нужно изображение по умолчанию, чтобы установить ImageView, когда он не отображает другое изображение. Вот как это делает приложение Контакты:

Я пробовал это, чтобы очистить Image и DrawableCache в ImageView

Надеюсь, это сработает для вас!

Если ни одно из этих решений не очищает изображение, которое вы уже установили (особенно setImageResource(0) или setImageResources(android.R.color.transparent) , убедитесь, что текущее изображение не установлено в качестве фона, используя setBackgroundDrawable(. ) или что-то подобное .

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

Если вы используете скольжение, вы можете сделать это так.

Эй, я знаю, что очень опаздываю с этим ответом, но просто подумал, что должен поделиться этим,

Метод, который вызывается при сбросе изображения, должен быть тем же методом, который вы вызывали, когда настраивали его.

Читайте также:  Хороший квест для android

Если вы хотите сбросить источник изображения @ dennis.sheepard , ответ работает нормально, только если вы изначально устанавливаете изображение в растровом изображении с помощью setImageResource()

Я использовал setImageBitmap() и, следовательно, настройка setImageResource(0) не работала, вместо этого я использовал setImageBitmap(null) .

Мне удалось добиться этого, определив выводимый (что-то вроде blank_white_shape.xml):

Затем, когда я хочу очистить изображение, я просто вызываю

Источник

Как очистить ImageView в Android?

Я повторно использую ImageView для своих дисплеев, но в какой-то момент у меня нет значений для его размещения.

Итак, как очистить ImageView в Android?

Ни один из них не очистил представление, он все еще показывает предыдущее изображение.

ОТВЕТЫ

Ответ 1

это работает, но не документировано, поэтому не совсем понятно, влияет ли это на что-то другое в представлении (вы можете проверить код ImageView, если хотите, я этого не сделал).

Я думаю, что лучшее решение:

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

Ответ 2

У меня была похожая проблема, когда мне нужно было полностью удалить ImageViews с экрана. Некоторые ответы здесь привели меня в правильном направлении, но в конечном итоге вызов setImageDrawable() сработал для меня:

(Как упомянуто в комментарии, такое использование задокументировано в официальных документах: ImageView # setImageDrawable.)

Ответ 3

Я знаю, что это старо, но я смог выполнить это с помощью

Не похоже, что он должен работать, но я попробовал это по прихоти, и он отлично работал.

Ответ 4

Похоже на то, что вы хотите, это образ по умолчанию, чтобы настроить ваш ImageView, когда он не отображает другое изображение. Вот как это делает приложение «Контакты»:

Ответ 5

Я попробовал это, чтобы очистить Image и DrawableCache в ImageView

Надеюсь, это сработает для вас!

Ответ 6

Если ни одно из этих решений не очистит изображение, которое вы уже установили (особенно setImageResource(0) или setImageResources(android.R.color.transparent) ), убедитесь, что текущее изображение не установлено в качестве фона с помощью setBackgroundDrawable(. ) или чего-то подобного.

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

Ответ 7

Эй, я знаю, что я очень опаздываю на этот ответ, но просто подумал, что должен поделиться этим,

Метод вызова, когда u reset образ должен быть тем же методом, что и u, в то время как u его устанавливал.

Когда u хочет reset, ответ image @dennis.sheepard работает отлично, только если u изначально устанавливает изображение в растровое изображение, используя setImageResource()

Я использовал setImageBitmap() и, следовательно, установка setImageResource(0) didn работала, вместо этого я использовал setImageBitmap(null) .

Ответ 8

Я смог достичь этого, указав drawable (что-то вроде blank_white_shape.xml):

Затем, когда я хочу очистить изображение, я просто вызываю

Это прекрасно работает для меня!

Ответ 9

Как kwasi написал и golu отредактировал, вы можете использовать прозрачный, а не белый

Внутри действия, вида и т.д.:

Ответ 10

Для изображения элемента ListView вы можете установить ImageView.setVisibility(View.INVISIBLE) или ImageView.setImageBitmap(null) в списке адаптеров для случая «без изображения».

Ответ 11

Чтобы удалить изображение в ImageView, используйте:

он работает для меня

Ответ 12

Если вы используете библиотеку поддержки, вы получаете AppCompatImageView вместо ImageView , который поддерживает setImageResource(0) на всех устройствах, поэтому вам следует использовать его так же, как и setImageDrawable(null) и setImageBitmap(null)

Читайте также:  Android sdk no packages found

В противном случае, он должен работать нормально, начиная с какой-то версии Android. В соответствии с кодом Android и в соответствии с моими тестами, я думаю, что было бы безопасно использовать setImageResource(0) из Android API 22 (5.1). Вы можете увидеть код Android API 22 против API 21, здесь

Ответ 13

Я столкнулся с той же проблемой, я изменил цвет фона представления на цвет фона макета, вы можете сделать так:

//затем устанавливаем изображение

Ответ 14

Это работает для меня.

Это вылетает во время выполнения.

Ответ 15

Могу ли я просто указать, что вы все пытаетесь установить, и int, где ожидается ожидание.

Источник

Как очистить ImageView в Android?

Я повторно использую ImageView для своих дисплеев, но в какой-то момент у меня нет значений.

Итак, как очистить ImageView в Android?

Ни один из них не очистил представление, он все еще показывает предыдущее изображение.

Я использовал это с решением dennis.sheppard :

Он работает, но он не документирован, поэтому не совсем понятно, влияет ли оно на что-то другое в представлении (вы можете проверить код ImageView, если хотите, я этого не сделал).

Я считаю, что лучшим решением является:

Мне нравится это решение, и в большинстве случаев нет ничего сложного в возвращении государства, и также ясно, что он делает.

У меня была аналогичная проблема, когда мне нужно было полностью удалить ImageViews с экрана. Некоторые из ответов привели меня в правильном направлении, но в конечном итоге вызов setImageDrawable () работал на меня:

Я знаю, что это старо, но я смог выполнить это с помощью

Не похоже, что это должно сработать, но я попробовал это по прихоти, и это сработало отлично.

Похоже на то, что вы хотите, это образ по умолчанию, чтобы настроить ImageView, когда он не отображает другое изображение. Вот как это делает приложение «Контакты»:

Я попробовал это, чтобы очистить Image и DrawableCache в ImageView

Надеюсь, это сработает для вас!

Если ни одно из этих решений не очищает изображение, которое вы уже установили (особенно setImageResource(0) или setImageResources(android.R.color.transparent) , убедитесь, что текущее изображение не установлено в качестве фона с помощью setBackgroundDrawable(. ) Или что-то подобное.

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

Эй, я знаю, что я очень опаздываю на этот ответ, но просто подумал, что должен поделиться этим,

Метод вызова, когда u сбросить изображение, должен быть тем же самым методом, который был вызван u, когда u устанавливал его.

Когда вы хотите сбросить исходный код изображения @ dennis.sheepard ответ работает отлично, только если u изначально устанавливает изображение в растровое изображение, используя setImageResource()

Я использовал setImageBitmap() и поэтому установка setImageResource(0) didn работает, вместо этого я использовал setImageBitmap(null) .

Я смог достичь этого, указав drawable (что-то вроде blank_white_shape.xml):

Затем, когда я хочу очистить изображение, я просто позвоню

Это прекрасно работает для меня!

Для изображения элемента ListView вы можете установить ImageView.setVisibility(View.INVISIBLE) или ImageView.setImageBitmap(null) в адаптере списка для случая «без изображения».

Поскольку kwasi написал и редактировал golu , вы можете использовать прозрачный, а не белый:

Внутри действия, просмотра и т. Д .:

Чтобы удалить изображение в ImageView, используйте:

Могу ли я просто указать, что вы все пытаетесь установить, и int, где ожидается ожидание.

Источник

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