Ändern der ImageView-Quelle


257

Ich habe ein ImageViewmit einem Quellbild in der XML mit der folgenden Syntax festgelegt:

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

Jetzt muss ich dieses Bild programmgesteuert ändern. Was ich tun muss, ist das alte Bild zu löschen und ein neues hinzuzufügen. Was ich getan habe ist folgendes:

myImgView.setBackgroundResource(R.drawable.monkey);

Es funktioniert, aber ich habe festgestellt, dass Android das neue Bild über das alte stapelt (frag mich nicht, wie ich herausgefunden habe, dass es für die Diskussion nicht relevant ist :). Ich muss auf jeden Fall das alte loswerden, bevor ich das neue Bild einstelle.

Wie kann ich das erreichen?

Antworten:


635

Ändern der ImageView-Quelle:

Mit setBackgroundResource()Methode:

  myImgView.setBackgroundResource(R.drawable.monkey);

Sie setzen diesen Affen in den Hintergrund.

Ich schlage die Verwendung der setImageResource()Methode vor:

  myImgView.setImageResource(R.drawable.monkey);

oder mit setImageDrawable()Methode:

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

*** Mit der neuen Android API ist 22 getResources().getDrawable()jetzt veraltet. Dies ist ein Beispiel für die Verwendung:

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

und wie man alte API-Versionen überprüft:

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

oh cool ... leider habe ich gerade herausgefunden, dass ich auch einen Bildsatz durch myImgView.setImageDrawable (img) ersetzen muss; der von Ihnen vorgeschlagene Code myImgView.setImageResource (R.drawable.monkey); ist nicht in der Lage, es zu tun. Wie kann ich das Drawable entfernen, bevor ich den Affen rendere? :) vielen dank
nourdine

1
getDrawable (int) ist jetzt veraltet und getDrawable (int, theme) wurde in API-21 hinzugefügt. Was ist jetzt zu tun? Können Sie bitte Ihre Antwort aktualisieren?
Mubeen

Anruf erfordert API-Level 16 (aktuelle min ist 13): android.widget.ImageView#setBackground
Iman Marashi

ContextCompatohne zeichnen zu könnengetTheme
Outofdate


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

wird zum Einstellen des Bildes in der aktuellen Bildansicht verwendet. Wenn Sie dieses Bild jedoch löschen möchten, können Sie diesen Code wie folgt verwenden:

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

Jetzt wird das Bild aus Ihrer Bildansicht gelöscht, da der Ressourcenwert auf Null gesetzt wurde.


18

ID von ImageView abrufen als

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

dann benutze

imgFp.setImageResource(R.drawable.fpscan);

um das Quellbild programmgesteuert anstelle von XML festzulegen.


8

Oder versuchen Sie es mit diesem. Für mich funktioniert es gut:

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

5

Ergänzende visuelle Antwort

ImageView: setImageResource()(Standardmethode, Seitenverhältnis wird beibehalten)

Geben Sie hier die Bildbeschreibung ein

View: setBackgroundResource()(Bild ist gestreckt)

Geben Sie hier die Bildbeschreibung ein

Beide

Geben Sie hier die Bildbeschreibung ein

Meine ausführlichere Antwort ist hier .


3

Wenn Sie in der Bildansicht ein Bild festlegen möchten , das sich in den Mipmap-Verzeichnissen befindet , können Sie dies folgendermaßen tun:

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


2

Schreiben Sie einfach eine Methode zum Ändern der Bildansicht

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();
        }
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.