Mengubah sumber ImageView

257

Saya punya ImageViewdengan sumber gambar yang diatur dalam xml menggunakan sintaks berikut:

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

Sekarang saya perlu mengubah gambar ini secara terprogram. Yang perlu saya lakukan adalah menghapus gambar lama dan menambahkan yang baru. Apa yang saya lakukan adalah ini:

myImgView.setBackgroundResource(R.drawable.monkey);

Ini berfungsi tetapi saya perhatikan Android menumpuk gambar baru di atas yang lama (jangan tanya bagaimana saya tahu itu tidak relevan untuk diskusi :). Saya pasti perlu menyingkirkan yang lama sebelum mengatur gambar baru.

Bagaimana saya bisa mencapainya?

nourdine
sumber

Jawaban:

635

Mengubah sumber ImageView:

Menggunakan setBackgroundResource()metode:

  myImgView.setBackgroundResource(R.drawable.monkey);

Anda menempatkan monyet itu di latar belakang.

Saya menyarankan penggunaan setImageResource()metode:

  myImgView.setImageResource(R.drawable.monkey);

atau dengan setImageDrawable()metode:

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

*** Dengan Android 22 API baru getResources().getDrawable()sekarang sudah usang. Ini adalah contoh cara menggunakan sekarang:

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

dan cara memvalidasi untuk versi API lama:

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));
}
Jorgesys
sumber
oh keren ... sayangnya saya baru tahu bahwa saya juga perlu mengganti set gambar dengan myImgView.setImageDrawable (img); kode yang Anda sarankan myImgView.setImageResource (R.drawable.monkey); tidak mampu melakukannya. bagaimana saya bisa menyingkirkan yang dapat ditarik sebelum memberikan monyet? :) terima kasih banyak
nourdine
1
getDrawable (int) sekarang sudah usang dan getDrawable (int, theme) ditambahkan di API-21. Sekarang apa yang harus dilakukan? Bisakah Anda memperbarui jawaban Anda?
mubeen
Panggilan membutuhkan API level 16 (min saat ini adalah 13): android.widget.ImageView#setBackground
Iman Marashi
ContextCompatuntuk mendapatkan getTheme
drawable
50

Anda seharusnya menggunakan setImageResourcesebagai gantinya setBackgroundResource.

David Hedlund
sumber
32
myImgView.setImageResource(R.drawable.monkey);

digunakan untuk mengatur gambar dalam tampilan gambar saat ini, tetapi jika ingin menghapus gambar ini maka Anda dapat menggunakan kode ini seperti:

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

sekarang ini akan menghapus gambar dari tampilan gambar Anda, karena telah menetapkan nilai sumber daya ke nol.

PIR FAHIM SHAH
sumber
18

dapatkan ID ImageView sebagai

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

lalu gunakan

imgFp.setImageResource(R.drawable.fpscan);

untuk mengatur sumber gambar secara terprogram alih-alih dari XML.

Neha Shukla
sumber
8

Atau coba yang ini. Bagi saya itu berfungsi dengan baik:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
radu_paun
sumber
5

Jawaban visual tambahan

ImageView: setImageResource()(metode standar, rasio aspek disimpan)

masukkan deskripsi gambar di sini

View: setBackgroundResource()(gambar diregangkan)

masukkan deskripsi gambar di sini

Kedua

masukkan deskripsi gambar di sini

Jawaban lengkap saya ada di sini .

Suragch
sumber
3

Jika Anda ingin mengatur imageview gambar yang ada di dalam dir mipmap Anda dapat melakukannya seperti ini:

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

CommonSenseCode
sumber
2

Cukup tulis metode untuk mengubah tampilan gambar

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();
        }
    }
}
RENDAH
sumber