Thay đổi nguồn ImageView


257

Tôi có một ImageViewhình ảnh nguồn được đặt trong xml bằng cú pháp sau:

   <ImageView 
      android:id="@+id/articleImg"
      style="@style/articleImgSmall_2"
      android:src="@drawable/default_m" />

Bây giờ tôi cần thay đổi hình ảnh này theo chương trình. Những gì tôi cần làm là xóa hình ảnh cũ và thêm một hình ảnh mới mặc dù. Những gì tôi đã làm là thế này:

myImgView.setBackgroundResource(R.drawable.monkey);

Nó hoạt động nhưng tôi nhận thấy Android xếp hình ảnh mới lên trên hình cũ (đừng hỏi tôi làm thế nào tôi phát hiện ra nó không liên quan đến cuộc thảo luận :). Tôi chắc chắn cần phải loại bỏ cái cũ trước khi thiết lập hình ảnh mới.

Làm thế nào tôi có thể đạt được điều đó?

Câu trả lời:


635

Thay đổi nguồn ImageView:

Sử dụng setBackgroundResource()phương pháp:

  myImgView.setBackgroundResource(R.drawable.monkey);

bạn đang đặt con khỉ đó vào nền

Tôi đề nghị sử dụng setImageResource()phương pháp:

  myImgView.setImageResource(R.drawable.monkey);

hoặc với setImageDrawable()phương pháp:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));

*** Với API Android 22 mới getResources().getDrawable()hiện không được chấp nhận. Đây là một ví dụ về cách sử dụng ngay bây giờ:

myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));

và cách xác thực cho các phiên bản API cũ:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey, getApplicationContext().getTheme()));
   } else {
     myImgView.setImageDrawable(getResources().getDrawable(R.drawable.monkey));
}

ồ tuyệt vời ... thật không may, tôi vừa phát hiện ra rằng tôi cũng cần thay thế một bộ ảnh bằng myImgView.setImageDrawable (img); mã bạn đề xuất myImgView.setImageResource (R.drawable.monkey); không thể làm điều đó. Làm thế nào tôi có thể thoát khỏi drawable trước khi kết xuất con khỉ? :) cảm ơn nhiều
nourdine

1
getDrawable (int) hiện không được dùng nữa và getDrawable (int, theme) được thêm vào API-21. Bây giờ làm gì? Bạn có thể vui lòng cập nhật câu trả lời của bạn?
mubeen

Cuộc gọi yêu cầu API cấp 16 (tối thiểu hiện tại là 13): android.widget.ImageView#setBackground
Iman Marashi

ContextCompatđể có thể rút được mà không cầngetTheme
Outofdate


32
myImgView.setImageResource(R.drawable.monkey);

được sử dụng để cài đặt hình ảnh trong chế độ xem hình ảnh hiện tại, nhưng nếu muốn xóa hình ảnh này thì bạn có thể sử dụng mã này như:

((ImageView) v.findViewById(R.id.ImageView1)).setImageResource(0);

bây giờ điều này sẽ xóa hình ảnh khỏi chế độ xem hình ảnh của bạn, bởi vì nó đã đặt giá trị tài nguyên về 0.


18

lấy ID của ImageView như

ImageView imgFp = (ImageView) findViewById(R.id.imgFp);

sau đó sử dụng

imgFp.setImageResource(R.drawable.fpscan);

để đặt hình ảnh nguồn theo chương trình thay vì từ XML.


8

Hoặc thử cái này Đối với tôi nó hoạt động tốt:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));

5

Bổ sung câu trả lời trực quan

ImageView: setImageResource()(phương pháp tiêu chuẩn, tỷ lệ khung hình được giữ)

nhập mô tả hình ảnh ở đây

View: setBackgroundResource()(hình ảnh được kéo dài)

nhập mô tả hình ảnh ở đây

Cả hai

nhập mô tả hình ảnh ở đây

Câu trả lời đầy đủ hơn của tôi là ở đây .


3

Nếu bạn muốn thiết lập trong chế độ xem hình ảnh một hình ảnh bên trong các thư mục mipmap, bạn có thể làm như thế này:

myImageView.setImageDrawable(getResources().getDrawable(R.mipmap.my_picture)


2

Chỉ cần viết một phương pháp để thay đổi hình ảnh

public void setImage(final Context mContext, final ImageView imageView, int picture)
{
    if (mContext != null && imageView != null)
    {
        try
        {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture, mContext.getApplicationContext().getTheme()));
            } else
            {
                imageView.setImageDrawable(mContext.getResources().getDrawable(picture));
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
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.