Zmiana źródła ImageView

257

Mam ImageViewz obrazem źródłowym ustawionym w xml przy użyciu następującej składni:

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

Teraz muszę programowo zmienić ten obraz. Muszę jednak usunąć stary obraz i dodać nowy. Zrobiłem to:

myImgView.setBackgroundResource(R.drawable.monkey);

Działa, ale zauważyłem, że Android układa nowy obraz na starym (nie pytaj mnie, jak się dowiedziałem, że nie ma znaczenia w dyskusji :). Zdecydowanie muszę pozbyć się starego przed ustawieniem nowego obrazu.

Jak mogę to osiągnąć?

łasica
źródło

Odpowiedzi:

635

Zmienianie źródła ImageView:

Za pomocą setBackgroundResource()metody:

  myImgView.setBackgroundResource(R.drawable.monkey);

umieszczasz tę małpę w tle.

Sugeruję użycie setImageResource()metody:

  myImgView.setImageResource(R.drawable.monkey);

lub setImageDrawable()metodą:

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

*** Z nowym Android API API 22 getResources().getDrawable()jest już przestarzałe. Oto przykład, jak korzystać teraz:

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

i jak sprawdzić poprawność dla starych wersji API:

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
źródło
och fajnie ... niestety właśnie dowiedziałem się, że muszę również zastąpić zestaw obrazów myImgView.setImageDrawable (img); kod, który zasugerowałeś myImgView.setImageResource (R.drawable.monkey); nie jest w stanie tego zrobić. jak mogę pozbyć się rysowalnego przed renderowaniem małpy? :)
wielkie
1
getDrawable (int) jest teraz przestarzałe, a getDrawable (int, theme) jest dodawany do API-21. Co teraz zrobić? Czy możesz zaktualizować swoją odpowiedź?
mubeen
Połączenie wymaga interfejsu API na poziomie 16 (bieżąca min to 13): android.widget.ImageView#setBackground
Iman Marashi
ContextCompatdostać się bezgetTheme
Outofdate
50

Powinieneś użyć setImageResourcezamiast setBackgroundResource.

David Hedlund
źródło
4
Porównanie dwóch
Suragch
32
myImgView.setImageResource(R.drawable.monkey);

służy do ustawienia obrazu w bieżącym widoku obrazu, ale jeśli chcesz usunąć ten obraz, możesz użyć tego kodu, takiego jak:

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

teraz spowoduje to usunięcie obrazu z widoku obrazu, ponieważ ustawiono wartość zasobów na zero.

PIR FAHIM SHAH
źródło
18

uzyskaj identyfikator ImageView jako

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

następnie użyj

imgFp.setImageResource(R.drawable.fpscan);

programowo ustawić obraz źródłowy zamiast z XML.

Neha Shukla
źródło
8

Lub spróbuj tego. Dla mnie działa dobrze:

imageView.setImageDrawable(ContextCompat.getDrawable(this, image));
radu_paun
źródło
5

Uzupełniająca odpowiedź wizualna

ImageView: setImageResource()(metoda standardowa, proporcje są zachowane)

wprowadź opis zdjęcia tutaj

View: setBackgroundResource()(obraz jest rozciągnięty)

wprowadź opis zdjęcia tutaj

Obie

wprowadź opis zdjęcia tutaj

Moja pełniejsza odpowiedź jest tutaj .

Suragch
źródło
3

Jeśli chcesz ustawić w widoku obrazu obraz znajdujący się w katalogach mipmap , możesz to zrobić w następujący sposób:

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

CommonSenseCode
źródło
2

Po prostu napisz metodę zmiany widoku obrazu

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();
        }
    }
}
NISKA
źródło