2013-06-03 18 views
58

Quando si modifica l'immagine a livello di codice, viene visualizzata una nuova immagine sopra l'immagine precedente impostata originariamente nel file di layout?Modifica immagine di ImageView a livello di codice Android

Ecco un frammento del mio file di layout:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="39dp" 
    android:gravity="center_vertical" > 
    <ImageView 
     android:id="@+id/qStatusImage" 
     android:layout_width="16dp" 
     android:layout_height="16dp" 
     android:layout_margin="5dp" 
     android:background="@drawable/thumbs_down" 
     /> 

    <TextView 
     android:id="@+id/grp_child" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:textColor="@color/radio_colors" 
     android:textStyle="normal" 
     android:background="@color/grey" 
    /> 

</LinearLayout> 

E il codice che imposta l'ImageView:

 @Override 
public View getChildView(final int groupPosition, final int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) { 
//Answers 
      if(answersGroup != null) 
        answersGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
         @Override 
        public void onCheckedChanged(RadioGroup group, int checkedId) { 

         // int index = answersGroup.indexOfChild(findViewById(answersGroup.getCheckedRadioButtonId())); 

          qImageView = (ImageView) V.findViewById(R.id.qStatusImage); 
          if(ans ==0 || ans == 5){ 
          // qSV.setImageResource(0); 
           qImageView.setImageResource(R.drawable.thumbs_up); 
          } 
          else 
           qImageView.setImageResource(R.drawable.thumbs_down); 

         } 
        }); 

Che cosa mi manca?

+0

Il titolo è fuorviante prova che rende accurato per la descrizione! – neferpitou

risposta

119

Ciò accade perché si sta impostando l'src dello ImageView invece dello sfondo.

Utilizzare questo invece:

qImageView.setBackgroundResource(R.drawable.thumbs_down); 

Here s' un filo che parla delle differenze tra i due metodi.

+14

Non funziona nell'API 14. Utilizzare: image.setImageResource (R.drawable.icon_dot1); – Brave

+0

@ La risposta di Brave è corretta. Usando 'setBackgroundResource()' :((non ho rimosso l'immagine esistente prima di usare la nuova immagine .. quindi ho ottenuto due immagini in collisione lì. 'SetImageResource()' ha funzionato :). Ancora .. il post mi ha fatto sulla buona strada - i miei ringraziamenti per entrambe le risposte! – gnB

+0

Come dice la risposta di @mricyicy, il problema è che il xml sta definendo l'immagine di sfondo e il codice sta cambiando l'immagine della risorsa. Quelli non sono la stessa cosa L'impostazione dell'immagine della risorsa è ciò che è effettivamente desiderato qui, quindi l'xml dovrebbe essere corretto. –

13

Nella vostra XML per la visualizzazione di immagini, in cui si dispone di android:background="@drawable/thumbs_down cambiamento che questo android:src="@drawable/thumbs_down"

Attualmente è mettere l'immagine come sfondo per la vista e non l'immagine reale in esso.

41

Uso in XML:

android:src="@drawable/image" 

uso Fonte:

imageView.setImageDrawable(ContextCompat.getDrawable(activity, R.drawable.your_image)); 
+0

grazie, funziona –

17
qImageView.setImageResource(R.drawable.img2); 

penso che questo vi aiuterà a

+0

Questa è la migliore risposta IMO. – seekingStillness

2

In Design XML

android:background="@drawable/imagename 
android:src="@drawable/imagename" 

Drawable Immagine tramite codice

imageview.setImageResource(R.drawable.imagename); 

immagine Server

Glide.with(context).load(url) .placeholder(R.drawable.image) 
.into(imageView); 

Picasso.with(context).load(url) .placeholder(R.drawable.image) 
.into(imageView); 
Problemi correlati