Android에서 ImageView를 지우는 방법은 무엇입니까?


277

나는 ImageView디스플레이에 s를 재사용 하고 있지만 어느 시점에 그것을 넣을 가치가 없습니다.

그렇다면 ImageView안드로이드에서 를 지우는 방법은 무엇입니까?

난 노력 했어:

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

그들 중 누구도보기를 지우지 않았으며 여전히 이전 이미지를 보여줍니다.


1
값이 없을 때 기본 이미지를로드하는 것이 좋습니다.
Praveen

3
기본 이미지가없고 배경 만 있습니다. 배경 만 있으면됩니다.
Pentium10

수락 된 답변을 여기에서 변경해야한다고 생각합니다. '해결 방법'답변에서 실제 답변 (또는 더 나은 답변)으로 수락 된 답변을 변경 / 이동하기위한 스택 오버 플로우에 대한 조항이 있습니까? 나 같은 많은 사용자가 더 나은 답변보다는 받아 들여질 수 있기 때문에
Shirish Herwade

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); 코드
Javier

3
실제로 ID가 0 인 리소스가있는 경우 실제로 해당 뷰를 드로어 블 뷰로 설정합니다. 그래도 기회가 무엇인지 잘 모르겠습니다 ..
Chris

1
setImageResource (0)에 문제가 있었지만 항상 작동하지는 않았습니다. 그러나 투명하게 설정하면 매우 안정적입니다. 감사!
Scott Biggs

6
viewToUse.setImageResource(0);효과는 없었지만 viewToUse.setImageResource(android.R.color.transparent);효과는있었습니다.
zionpi

119

비슷한 문제가있어서 기본적으로 화면에서 ImageView를 완전히 제거해야했습니다. 여기에있는 답변 중 일부는 나를 올바른 방향으로 인도했지만 궁극적으로 setImageDrawable ()을 호출하면 나에게 도움이되었습니다.

imgView.setImageDrawable(null);

(의견에서 언급했듯이 그러한 사용법은 공식 문서에 설명되어 있습니다 : ImageView # setImageDrawable .)


3
이것은 적어도 내 앱에서 안정적으로 작동합니다. setImageResource (0)는 가끔 작동하지만 다른 것은 작동하지 않습니다.
Hong

5
당신이 setImageBitmap를 사용하여 이미지를 설정 한 경우이 당신이 원하는 무엇을
케빈 파커

이것은 제 생각에 가장 좋은 대답입니다! 깨끗하고 유효하며 매우 짧습니다. 빈 드로어 블을 정의하고 적용 할 필요가 없습니다.
Potaito

이 답변은 실제로 안정적으로 작동합니다! 그리고이 코드를 솔루션으로 언급 한 가장 빠른 게시물입니다. 따라서 나는 동일한 답변을 가진 다른 게시물이 아닌이 게시물을 올렸습니다.
Original Android

2
이 답변은 실제로 공식 문서에 설명되어 있습니다 : developer.android.com/reference/android/widget/…

79

나는 이것이 오래되었다는 것을 알고 있지만

viewToUse.setImageResource(0);

그것이 작동하는 것처럼 보이지는 않지만 변덕에 그것을 시도하고 완벽하게 작동했습니다.


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 : 자원 ID 번호 0x0으로", 빈 이미지를 설정하는 것은 "분명히"를 이미지 뷰에 가장 좋은 방법 것 같다, 그래서
파벨 알렉 세 에프

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 ()를 확인하십시오.
Dan Lew

9
원하는 답변이 아닌 경우 왜 정답을 확인 했습니까?
arniotaki

3
Daniel 사람들이 이미지를 선명하게 원하는 이유는 여러 가지가있을 수 있습니다.
K-SO의 독성이 증가하고 있습니다.

1
그는 기본 이미지를 원하지 않습니다. 그는 그것을 정리하기를 원합니다.
EpicPandaForce

13

ImageView에서 Image 및 DrawableCache를 지우려고 시도했습니다.

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

나는 이것이 당신을 위해 작동하기를 바랍니다!


9

이러한 솔루션 중 어느 것도 이미 설정 한 이미지를 삭제하지 않은 경우 (특히 setImageResource(0)또는 setImageResources(android.R.color.transparent), 반드시 현재의 이미지를 사용하여 배경으로 설정되지 않은 확인하십시오 setBackgroundDrawable(...)또는 이와 유사한.

코드는 포 그라운드의 이미지 리소스를 설정 한 배경 이미지 앞에 투명한 것으로 설정하고 계속 표시합니다.


6

이봐, 나는 내가이 답변에 매우 늦었다는 것을 알고 있지만, 나는 이것을 이것을 공유해야한다고 생각했다.

이미지를 재설정 할 때 호출하는 방법은 u를 설정하는 동안 호출 한 방법과 같아야합니다.

이미지 소스 를 재설정하려는 경우 @ dennis.sheepard 응답은 원래 비트 맵에서 이미지를 설정하는 경우에만 제대로 작동합니다.setImageResource()

예를 들어

나는 사용 setImageBitmap()했기 때문에 설정이 setImageResource(0)작동하지 않고 대신 사용했습니다 setImageBitmap(null).


1
당신은 맞다 Ajay, 나는 똑같이 관찰했다. 조건에 따라 동일한 이미지 뷰에 대해 setImageBitmap () / setImageResource ()를 대신 사용했습니다. 따라서 이미지 뷰를 지우려면 setImageResource (0) / setImageBitmap (null) alternativley를 사용해야했습니다. 감사!
Monica M

5

글라이드를 사용하면 다음과 같이 할 수 있습니다.

Glide.with(yourImageView).clear(yourImageView)

감사합니다 refig, 그것은 많은 도움이됩니다.
ucMedia

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)목록 어댑터에서 설정할 수 있습니다 .


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

0

이미지 뷰를 사용하여 이미지를 제거하려면 :

title_image.setImageResource(-1);

그것은 나를 위해 작동


0

지원 라이브러리를 사용하면 AppCompatImageView대신 모든 장치에서 ImageView지원되는 을 얻게 setImageResource(0)되므로 setImageDrawable(null)setImageBitmap(null)

그렇지 않으면 일부 Android 버전부터 잘 작동합니다. Android 코드와 테스트에 따르면 setImageResource(0)Android API 22 (5.1)에서 사용하는 것이 안전해야한다고 생각합니다 . 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);

-1

난 그냥 당신이 무엇을 설정하고 indrawable을 기대하는 곳을 지적 할 수 있습니까?

다음을하지 말아야합니까?

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.