Modifica della fonte di ImageView


257

Ho un ImageViewcon un'immagine di origine impostata nel file XML usando la sintassi seguente:

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

Ora ho bisogno di cambiare questa immagine a livello di codice. Quello che devo fare è cancellare la vecchia immagine e aggiungerne una nuova però. Quello che ho fatto è questo:

myImgView.setBackgroundResource(R.drawable.monkey);

Funziona ma ho notato che Android impila la nuova immagine sopra quella vecchia (non chiedermi come ho scoperto che non è rilevante per la discussione :). Devo assolutamente liberarmi di quello vecchio prima di impostare la nuova immagine.

Come posso raggiungerlo?

Risposte:


635

Modifica della fonte di ImageView:

Utilizzando il setBackgroundResource()metodo:

  myImgView.setBackgroundResource(R.drawable.monkey);

stai mettendo quella scimmia sullo sfondo.

Suggerisco l'uso del setImageResource()metodo:

  myImgView.setImageResource(R.drawable.monkey);

o con setImageDrawable()metodo:

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

*** Con la nuova API 22 di Android getResources().getDrawable()è ora obsoleto. Questo è un esempio di come usare ora:

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

e come convalidare per le vecchie versioni dell'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));
}

oh fantastico ... sfortunatamente ho appena scoperto che devo anche sostituire un'immagine impostata con myImgView.setImageDrawable (img); il codice che hai suggerito myImgView.setImageResource (R.drawable.monkey); non è in grado di farlo. come posso liberarmi del disegno prima di rendere la scimmia? :) molte grazie
nourdine il

1
getDrawable (int) ora è deprecato e getDrawable (int, tema) viene aggiunto in API-21. Ora cosa fare? Puoi per favore aggiornare la tua risposta?
Mubeen

La chiamata richiede il livello API 16 (l'attuale minimo è 13): android.widget.ImageView#setBackground
Iman Marashi

ContextCompatper essere disegnabili senzagetTheme
Outofdate


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

viene utilizzato per impostare l'immagine nella vista immagine corrente, ma se si desidera eliminare questa immagine, è possibile utilizzare questo codice come:

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

ora questo eliminerà l'immagine dalla visualizzazione dell'immagine, perché ha impostato il valore delle risorse su zero.


18

ottieni l'ID di ImageView come

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

quindi utilizzare

imgFp.setImageResource(R.drawable.fpscan);

per impostare l'immagine sorgente in modo programmatico anziché da XML.


8

Oppure prova questo. Per me funziona benissimo:

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

5

Risposta visiva supplementare

ImageView: setImageResource()(metodo standard, le proporzioni vengono mantenute)

inserisci qui la descrizione dell'immagine

View: setBackgroundResource()(l'immagine è allungata)

inserisci qui la descrizione dell'immagine

Tutti e due

inserisci qui la descrizione dell'immagine

La mia risposta più completa è qui .


3

Se vuoi impostare in imageview un'immagine che si trova all'interno delle directory mipmap puoi farlo in questo modo:

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


2

Basta scrivere un metodo per cambiare imageview

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();
        }
    }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.