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

277

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

Так как очистить ImageViewAndroid?

Я пробовал:

mPhotoView.invalidate();
mPhotoView.setImageBitmap(null);

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

Pentium10
источник
1
Я предлагаю загрузить изображение по умолчанию, когда у вас нет значения.
Правин
3
У меня нет изображения по умолчанию, только фон. Мне нужно иметь только фон.
Pentium10
Я думаю, что принятый ответ должен быть изменен здесь. Существуют ли какие-либо условия в стеке потока, чтобы изменить / переместить принятый ответ в реальный ответ (или, что еще лучше, ответ) из «обходного» ответа? Потому что многие пользователи (такие как я) могут пойти на принятый, а не на лучший ответ
Шириш Хервейд
1
@ShirishHerwade хорошо изменилось
Pentium10
Я столкнулся с той же проблемой, я делаю это так: stackoverflow.com/a/50448536/5697474
Syed Danish Haider

Ответы:

540

Я делал это с помощью решения dennis.sheppard :

viewToUse.setImageResource(0);

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

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

viewToUse.setImageResource(android.R.color.transparent);

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

Марио Ленчи
источник
3
Я думаю, что использование setImageResource с идентификатором цвета даст вам проблемы с сбоем в Android 2.2.1
Blundell
2
для меня работает viewToUse.setImageResource (android.R.color.transparent); кодекс
Хавьер
3
Остерегайтесь этого, если у вас действительно есть ресурс с идентификатором 0, это повлияет на набор, который будет отображаться как представление вашего изображения. Не уверен, каковы шансы иметь это в качестве идентификатора, хотя ..
Крис
1
У меня были проблемы с setImageResource (0) - не всегда работал. Но установить его на прозрачный очень надежно. Спасибо!
Скотт Биггс
6
viewToUse.setImageResource(0);не сработало, но viewToUse.setImageResource(android.R.color.transparent);сработало.
zionpi
119

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

imgView.setImageDrawable(null);

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

Kon
источник
3
Это работает надежно, по крайней мере, в моем приложении. setImageResource (0) работает иногда, но не другие.
Hong
5
Если вы установили изображение с помощью setImageBitmap, то это то, что вам нужно
Кевин Паркер
Это на мой взгляд лучший ответ! Это чистый, действительный и очень короткий. Не нужно определять пустое рисование и применять его или тому подобное.
Потаито
Этот ответ на самом деле работает надежно! И это самое раннее сообщение о том, что этот код является решением. Поэтому я проголосовал за этот, а не за другие посты с тем же ответом.
Оригинальный Android
2
Ответ на этот вопрос на самом деле документально на официальных документы: developer.android.com/reference/android/widget/...
79

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

viewToUse.setImageResource(0);

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

dennis.sheppard
источник
2
На самом деле, установка его на ЛЮБОЙ недопустимый ресурс изображений работает (-1, 45 и т. Д.)
dvallejo
8
Нет, установка -1 дает вам android.content.res.Resources $ NotFoundException. 0 похоже на работу.
NateS
28
Это тот случай, когда вы прокручиваете свой просмотр списка. каким-то образом изображение, которое устанавливает его в 0, покажет неправильное изображение (оно будет отображать изображение из другого изображения), поэтому приведенное ниже разрешение может сделать это viewToUse.setImageResource (android.R.color.transparent);
Sruit A.Suk
3
Я однажды получил эту ошибку, когда попробовал этот метод: «android.content.res.Resources $ NotFoundException: Resource ID # 0x0», поэтому кажется, что установка пустого изображения - лучший способ «очистить» ImageView
Павел Алексеев,
16

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

if (photoId == 0) {
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture);
} else {
    // ... here is where they set an actual image ...
}
Дэн Лью
источник
67
Нет, я не хочу этого Я хочу просто очистить содержимое. Пользователь может выбрать новое изображение после.
Pentium10
3
Приложение «Контакты» имеет открытый исходный код ( android.git.kernel.org/?p=platform/packages/apps/… ). Я исследовал исходный код. Оказывается, они используют QuickContactBadge (подкласс ImageView), и когда у них нет фотографии, они используют setImageResource, чтобы установить изображение по умолчанию. Проверьте com.android.contacts.ContactsListActivity # ContactItemListAdapter для деталей, особенно в getView ().
Дэн Лью
9
Почему вы проверили этот ответ как правильный, если он не тот, который вы хотите?
Арниотаки
3
Даниэль Может быть много причин, почему люди хотят, чтобы изображение было четким.
К - Токсичность в СО растет.
1
Он не хочет изображения по умолчанию. Он хочет, чтобы это очистили.
EpicPandaForce
13

Я попытался это для очистки Image и DrawableCache в ImageView

ImgView.setImageBitmap(null);
ImgView.destroyDrawingCache();

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

Нанда
источник
9

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

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

Бред английский
источник
6

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

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

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

например,

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

Аджай
источник
1
Вы правы, Аджай, я заметил то же самое. Я использовал setImageBitmap () / setImageResource () альтернативно для того же изображения в зависимости от условий. Следовательно, мне пришлось использовать setImageResource (0) / setImageBitmap (null) alternativley, чтобы очистить представление изображения. Спасибо!
Моника М
5

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

Glide.with(yourImageView).clear(yourImageView)
Мойтаба Хаддади
источник
Спасибо, refig, это очень помогает.
Учебное заведение
3

Я смог добиться этого, определив drawable (что-то вроде blank_white_shape.xml):

<shape xmlns:android="http://schemas.android.com/apk/res/android"       
       android:shape="rectangle">
    <solid android:color="@android:color/white"/>
</shape>

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

 imageView.setImage(R.drawable.blank_white_shape);

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

Квази
источник
2

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

Arvis
источник
2

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

файл drawable/transparent.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@android:color/transparent"/>
</shape>

Внутри деятельности, просмотра и т. Д.

view.setImageResource(R.drawable.transparent);
Кит-Кат
источник
1

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

emoji.setBackground(null);

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

viewToUse.setImageResource(android.R.color.transparent);  
sbchitra
источник
0

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

title_image.setImageResource(-1);

у меня это работает

Тоборе Игбе
источник
0

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

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

разработчик Android
источник
0

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

 edit_countflag.setBackgroundColor(Color.parseColor("#ffffff"));

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

edit_countflag.setImageResource(R.drawable.flag_id);
Сайед Датский Хайдер
источник
0

Я пытался удалить изображение из ImageView тоже с помощью, ImageView.setImageRessource(0)но у меня не получилось.
К счастью, я получил это сообщение в журналах:

Caused by: java.lang.IllegalStateException: The specified child already has a parent. 
You must call removeView() on the child's parent first.

Итак, скажем, layoutmanagerваш экземпляр для макета, чем вам нужно сделать это:

RelativeLayout layoutManager = new RelativeLayout(this);
ImageView image = new ImageView(this);

// this line worked for me
layoutManager.removeView(image);
TornaxO7
источник
-1

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

разве вы не должны делать следующее?

imageview.setImageDrawable(this.getResources().getDrawable(R.drawable.icon_image));

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
Аарон Ньютон
источник