Làm cách nào để xóa ImageView trong Android?


276

Tôi đang sử dụng lại ImageViewcho màn hình của mình, nhưng tại một số điểm tôi không có giá trị để đặt nó.

Vậy làm thế nào để xóa một ImageViewtrong Android?

Tôi đã thử:

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

Không ai trong số họ đã xóa chế độ xem, nó vẫn hiển thị hình ảnh trước đó.


1
tôi đề nghị tải hình ảnh mặc định khi bạn không có giá trị.
Praveen

3
Tôi không có hình ảnh mặc định, chỉ là một nền tảng. Tôi cần phải có nền tảng.
Pentium10

Tôi nghĩ rằng câu trả lời được chấp nhận cần phải được thay đổi ở đây. Có bất kỳ quy định nào về stackoverflow để thay đổi / di chuyển câu trả lời được chấp nhận sang câu trả lời thực tế (hoặc câu trả lời tốt hơn) từ câu trả lời 'cách giải quyết' không? Bởi vì nhiều người dùng (như tôi) có thể được chấp nhận thay vì trả lời tốt hơn
Shirish Herwade

1
@ShirishHerwade ok thay đổi
Pentium10

Tôi đã phải đối mặt với cùng một vấn đề tôi làm như thế này: stackoverflow.com/a/50448536/5697474
Syed Đan Mạch Haider

Câu trả lời:


539

Tôi đã từng làm điều đó với giải pháp dennis.sheppard :

viewToUse.setImageResource(0);

nó hoạt động nhưng nó không được ghi lại nên nó không thực sự rõ ràng nếu nó ảnh hưởng đến thứ khác trong chế độ xem (bạn có thể kiểm tra mã ImageView nếu bạn muốn, tôi đã không làm vậy).

Tôi nghĩ giải pháp tốt nhất là:

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

Tôi thích giải pháp này vì lý do nhất không có gì khó khăn trong việc hoàn nguyên trạng thái và nó cũng rõ ràng những gì nó đang làm.


3
Tôi nghĩ rằng việc sử dụng setImageResource với số nhận dạng màu sẽ cung cấp cho bạn các sự cố sập trên Android 2.2.1
Blundell

2
đối với tôi hoạt động viewToUse.setImageResource (android.R.color.transparent); mã
Javier

3
Hãy cẩn thận với điều này, nếu bạn thực sự có một tài nguyên có id bằng 0 thì điều này sẽ hoàn toàn thiết lập có thể rút ra được như chế độ xem của bạn. Không chắc chắn những cơ hội có được đó là một id mặc dù ..
Chris

1
Tôi gặp vấn đề với setImageResource (0) - không phải lúc nào cũng hoạt động. Nhưng thiết lập nó trong suốt là rất đáng tin cậy. Cảm ơn!
Scott Bigss

6
viewToUse.setImageResource(0);không làm việc, nhưng viewToUse.setImageResource(android.R.color.transparent);làm việc
zionpi

118

Tôi gặp vấn đề tương tự, về cơ bản tôi cần phải loại bỏ hoàn toàn ImageViews khỏi màn hình. Một số câu trả lời ở đây đã đưa tôi đi đúng hướng, nhưng cuối cùng gọi setImageDrawable () đã làm việc cho tôi:

imgView.setImageDrawable(null);

(Như đã đề cập trong bình luận, việc sử dụng như vậy được ghi lại trong các tài liệu chính thức: ImageView # setImageDrawable .)


3
Điều này hoạt động đáng tin cậy ít nhất là trong ứng dụng của tôi. setImageResource (0) đôi khi hoạt động, nhưng không hoạt động.
Hồng

5
Nếu bạn đã đặt hình ảnh bằng setImageBitmap thì đây là thứ bạn muốn
Kevin Parker

Đây là ý kiến ​​của tôi câu trả lời tốt nhất! Nó sạch sẽ, hợp lệ và rất ngắn. Không cần phải xác định một drawable trống và áp dụng nó hoặc những thứ như thế.
Potaito

Câu trả lời này thực sự hoạt động đáng tin cậy! Và đó là bài viết sớm nhất nêu mã này là một giải pháp. Do đó tôi đã đánh giá cao bài này và không phải bài viết khác có cùng câu trả lời.
Android gốc

2
Câu trả lời này thực sự được ghi lại trên các tài liệu chính thức: developer.android.com/reference/android/widget/

79

Tôi biết điều này đã cũ, nhưng tôi đã có thể thực hiện điều này với

viewToUse.setImageResource(0);

Có vẻ như nó không hoạt động, nhưng tôi đã thử nó một cách bất chợt, và nó hoạt động hoàn hảo.


2
Trên thực tế, cài đặt nó thành BẤT
K

8
Không, cài đặt thành -1 cung cấp cho bạn android.content.res.Resource $ NotFoundException. 0 dường như làm việc.
NateS

28
Trường hợp này, khi bạn cuộn listview của bạn. bằng cách nào đó, chế độ xem hình ảnh được đặt là 0 sẽ hiển thị hình ảnh sai (nó sẽ hiển thị hình ảnh từ một lần xem hình ảnh khác) để độ phân giải bên dưới có thể thực hiện được viewToUse.setImageResource (android.R.color.transparent);
S A. A.Suk

3
Tôi đã gặp lỗi này một lần, khi thử phương pháp này: "android.content.res.Resource $ NotFoundException: Resource ID # 0x0", vì vậy có vẻ như đặt một hình ảnh trống là cách tốt nhất để "xóa" ImageView
Pavel Alexeev

16

Có vẻ như những gì bạn muốn là một hình ảnh mặc định để đặt ImageView của bạn khi nó không hiển thị một hình ảnh khác. Đây là cách ứng dụng Danh bạ thực hiện:

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

67
Không, tôi không muốn điều này. Tôi chỉ muốn xóa nội dung. Người dùng có thể chọn hình ảnh mới sau.
Pentium10

3
Ứng dụng Danh bạ là mã nguồn mở ( android.git.kernel.org/?p=pl platform / packages / apps / mẹo ). Tôi đã điều tra mã nguồn. Hóa ra họ đang sử dụng QuickContactBadge (một lớp con của ImageView) và khi họ không có ảnh, họ sử dụng setImageResource để đặt ảnh mặc định. Kiểm tra com.android.contacts.ContactsListActivity # ContactItemListAd CHƯƠNG để biết chi tiết, đặc biệt là trong getView ().
Dan Lew

9
Tại sao bạn lại kiểm tra câu trả lời đó là câu trả lời đúng nếu đó không phải là điều bạn muốn?
arniotaki

3
Daniel Có thể có nhiều lý do là tại sao mọi người muốn hình ảnh rõ ràng.
K - Độc tính trong SO đang tăng lên.

1
Anh ta không muốn một hình ảnh mặc định. Anh ấy muốn nó được xóa.
EpicPandaForce

13

Tôi đã thử cách này để xóa Image và DrawableCache trong ImageView

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

Tôi mong công việc này phù hợp với bạn !


9

Nếu không có giải pháp nào trong số này xóa một hình ảnh bạn đã đặt (đặc biệt setImageResource(0)hoặc setImageResources(android.R.color.transparent), hãy kiểm tra để đảm bảo hình ảnh hiện tại không được đặt làm nền sử dụng setBackgroundDrawable(...)hoặc một cái gì đó tương tự.

Mã của bạn sẽ chỉ đặt tài nguyên hình ảnh ở nền trước thành một cái gì đó trong suốt trước hình ảnh nền mà bạn đã đặt và vẫn sẽ hiển thị.


6

Này, tôi biết tôi rất muộn với câu trả lời này, nhưng chỉ nghĩ rằng tôi phải chia sẻ điều này,

Phương thức gọi khi bạn đặt lại hình ảnh phải giống với phương thức mà bạn đã gọi trong khi bạn đang đặt nó.

Khi bạn muốn đặt lại nguồn hình ảnh @ dennis.sheepard, câu trả lời chỉ hoạt động tốt nếu ban đầu bạn thiết lập hình ảnh trong bitmap bằng cách sử dụngsetImageResource()

ví dụ,

tôi đã sử dụng setImageBitmap()và do đó thiết lập setImageResource(0)didn hoạt động, thay vào đó tôi sử dụng setImageBitmap(null).


1
Bạn nói đúng Ajay, tôi cũng quan sát như vậy. Tôi đã sử dụng thay thế setImageBitmap () / setImageResource () cho cùng một chế độ xem hình ảnh tùy thuộc vào các điều kiện. Do đó tôi đã phải sử dụng setImageResource (0) / setImageBitmap (null) Alternativley để xóa hình ảnh. Cảm ơn!
Monica M

5

Nếu bạn sử dụng glide bạn có thể làm điều đó như thế này.

Glide.with(yourImageView).clear(yourImageView)

Cảm ơn refig, Nó giúp rất nhiều.
ucMedia

3

Tôi đã có thể đạt được điều này bằng cách định nghĩa một drawable (một cái gì đó như blank_white_shape.xml):

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

Sau đó, khi tôi muốn xóa chế độ xem hình ảnh, tôi chỉ cần gọi

 imageView.setImage(R.drawable.blank_white_shape);

Điều này làm việc rất đẹp cho tôi!


2

Đối với hình ảnh mục ListView, bạn có thể đặt ImageView.setVisibility(View.INVISIBLE)hoặc ImageView.setImageBitmap(null)trong bộ điều hợp danh sách cho trường hợp "không có hình ảnh".


2

Khi kwasi viết và golu chỉnh sửa, bạn có thể sử dụng trong suốt, thay vì màu trắng:

Tập tin 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>

Bên trong một hoạt động, xem, vv:

view.setImageResource(R.drawable.transparent);

1

Điều này làm việc cho tôi.

emoji.setBackground(null);

Sự cố này trong thời gian chạy.

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

0

Để xóa hình ảnh trong ImageView, hãy sử dụng:

title_image.setImageResource(-1);

nó hoạt động với tôi


0

Nếu bạn sử dụng thư viện hỗ trợ, bạn nhận được AppCompatImageViewthay vì ImageView, hỗ trợ setImageResource(0)trên tất cả các thiết bị, vì vậy bạn sẽ ổn khi sử dụng nó giống như cách sử dụng setImageDrawable(null)setImageBitmap(null)

Nếu không, nó sẽ hoạt động tốt bắt đầu từ một số phiên bản Android. Theo mã của Android và theo các thử nghiệm của tôi, tôi nghĩ rằng nó nên an toàn khi sử dụng setImageResource(0)từ Android API 22 (5.1). Bạn có thể xem mã Android của API 22 so với API 21, tại đây


0

Tôi đã phải đối mặt với cùng một vấn đề tôi đã thay đổi màu nền của chế độ xem thành bố cục màu nền mà bạn có thể làm như thế này:

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

// sau đó đặt hình ảnh

edit_countflag.setImageResource(R.drawable.flag_id);

0

Tôi đã cố gắng loại bỏ Hình ảnh của ImageView bằng cách sử dụng ImageView.setImageRessource(0)nhưng nó không hoạt động với tôi.
May mắn thay tôi đã nhận được thông báo này trong nhật ký:

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

Vì vậy, giả sử, layoutmanagerlà ví dụ của bạn cho bố cục, hơn bạn cần làm điều đó:

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

// this line worked for me
layoutManager.removeView(image);

-1

Tôi có thể chỉ ra những gì bạn đang cố gắng thiết lập và int nơi mà nó mong đợi có thể rút ra được.

bạn không nên làm như sau?

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

imageview.setImageDrawable(getApplicationContext().getResources().getDrawable(R.drawable.icon_profile_image));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.