Android imageview remove image

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, и вы хотите загрузить в него какое-нибудь изображение из галереи по нажатию кнопки:

Читайте также:  Radiobutton android studio кастомизация

Намерение 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?

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

ОТВЕТЫ

Ответ 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) .

Читайте также:  Что такое android system webview можно ли удалить

Ответ 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. В соответствии с кодом 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) в адаптере списка для случая «без изображения».

Читайте также:  Launch x431 idiag для android

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

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

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

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

Источник

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

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

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

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

15 ответов

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

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

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

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

Я знаю, что это старый, но я смог сделать это с

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

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

я попробовал это для очистки изображения и DrawableCache в ImageView

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

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

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

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

метод для вызова при сбросе изображения должен быть тем же самым методом, который 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) в адаптере списка для случая «без изображения».

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

внутри активности, просмотра и т. д.:

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

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

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

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

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

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

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

Источник

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