2010-05-18 8 views
196

Повторное использование ImageView s для моих дисплеев, но в какой-то момент у меня нет значений.Как очистить ImageView в Android?

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

Я пробовал:

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

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

+1

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

+3

У меня нет изображения по умолчанию, просто фона. Мне нужно иметь только фон. – Pentium10

+0

Я думаю, что принятый ответ нужно изменить здесь. Есть ли какое-либо положение в stackoverflow для изменения/переноса принятого ответа на фактический ответ (или более лучший ответ) из ответа обходного решения? Поскольку многие пользователи (например, я) могут пойти на принятый, а не лучший ответ –

ответ

414

Я использовал, чтобы сделать это с dennis.sheppard решения:

viewToUse.setImageResource(0); 

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

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

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

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

+3

Я думаю, используя setImageResource с идентификатором цвета даст вам сбойные проблемы на Android 2.2.1 – Blundell

+0

, что возможно. У меня нет устройства для его проверки. вы его протестировали? в случае напишите здесь, и я отредактирую ответ (и мой код :)). Я тестировал его на xperia U20i с 2.1-update1 и работает так, как ожидалось. –

+2

для меня работает viewToUse.setImageResource (android.R.color.transparent); код – Javier

17

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

if (photoId == 0) { 
    viewToUse.setImageResource(R.drawable.ic_contact_list_picture); 
} else { 
    // ... here is where they set an actual image ... 
} 
+64

Нет, я не хочу этого. Я хочу просто очистить содержимое. Пользователь может выбрать новое изображение после. – Pentium10

+0

Тогда я не понимаю. Вы не хотите, чтобы какое-либо изображение отображалось, но у вас нет изображения по умолчанию для отображения пользователю, когда изображение не отображается. Есть что-то, что вы * хотите показать пользователю или нет. Вы можете установить фон как ресурс изображения даже. –

+0

Если вы знакомы с «Контакты», есть замена фона фона фона для контактов, у меня это есть в моем коде. ' 'Это простой серый фон, на который приходит фото. – Pentium10

-3

Попробуйте mPhotoView.setAlpha(0), чтобы сделать изображение полностью прозрачным (восстановление с 255).

+7

Таким образом, ресурс изображения все еще существует и не будет собираться с мусором. Он должен быть полностью удален для gc, чтобы поднять его. –

77

Я знаю, что это старый, но я был в состоянии сделать это с

viewToUse.setImageResource(0); 

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

+2

На самом деле, устанавливая его для ЛЮБЫХ НЕИСПРАВНОСТЕЙ работы ресурса изображения (-1, 45 и т. Д.) – dvallejo

+7

Нет, установка на -1 дает вам android.content.res.Resources $ NotFoundException. 0 похоже работает. – NateS

+28

Этот случай, когда вы прокручиваете свой список. как-то изображение, которое устанавливает его как 0, покажет неправильное изображение (оно будет отображать изображение из другого изображения) , поэтому разрешение ниже может сделать это viewToUse.setImageResource (android.R.color.transparent); –

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); 

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

85

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

imgView.setImageDrawable(null); 
+3

Это работает надежно, по крайней мере, в моем приложении. setImageResource (0) работает иногда, но не другие. – Hong

+4

Если вы установили изображение, используя setImageBitmap, это то, что вы хотите –

+0

Это, на мой взгляд, лучший ответ! Он чистый, действительный и очень короткий. Не нужно определять пустую выносливость и применять ее или что-то подобное. – Cat

-1

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

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

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image)); 
1

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

5

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

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

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

, например, работает,

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

+1

Вы правы. Аджай, я заметил то же самое.Я использовал setImageBitmap()/setImageResource() альтернативно для одного и того же изображения в зависимости от условий. Поэтому я должен был использовать setImageResource (0)/setImageBitmap (null) alternativley, чтобы очистить изображение. Благодаря! –

9

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

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

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

1

Как 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

это Genius :) –

9

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

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

0

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

title_image.setImageResource(-1);

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

 Смежные вопросы

  • Нет связанных вопросов^_^