2013-06-03 18 views
58

Kiedy programowo zmieniam obraz, pokazuje nowy obraz na górze starego obrazu, który jest pierwotnie ustawiony w pliku układu?Zmiana ImageView programowo Android

Oto urywek z mojego pliku układ:

<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> 

I kod, który ustawia 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); 

         } 
        }); 

Czego mi brakuje?

+0

tytuł jest mylący, spróbuj to z dokładnością do opisu! – neferpitou

Odpowiedz

119

Dzieje się tak, ponieważ ustawiasz src na ImageView zamiast tła.

stosowany zamiast:

qImageView.setBackgroundResource(R.drawable.thumbs_down); 

Here jest gwint, który mówi o różnicy między tymi dwoma sposobami.

+14

Nie działa w interfejsie API 14. Powinien używać: image.setImageResource (R.drawable.icon_dot1); – Brave

+0

@ Odpowiedź Brave jest poprawna. Użycie 'setBackgroundResource()' :(nie usunęło istniejącego obrazu przed użyciem nowego obrazu, więc dostałem dwa zderzające się tam obrazy. 'SetImageResource()' pracował tho :). Mimo to ... post dostał mnie na właściwym tropie - moje podziękowania za obie odpowiedzi! – gnB

+0

Jak twierdzi @mricyicy, problem polega na tym, że xml definiuje obraz tła, a kod zmienia obraz zasobu. To nie to samo. Ustawienie obrazu zasobu jest tym, co jest rzeczywiście pożądane, dlatego należy naprawić xml. –

13

W swojej XML dla widoku obrazu, gdzie masz android:background="@drawable/thumbs_down zmiana to android:src="@drawable/thumbs_down"

Obecnie jest umieszczenie tego obrazu jako tła na widoku, a nie rzeczywistego obrazu w nim.

41

Zastosowanie w XML:

android:src="@drawable/image" 

stosowanie Źródło:

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

dziękuję, działa –

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

Myślę, że to pomoże Ci

+0

To jest najlepsza odpowiedź IMO. – seekingStillness

2

W XML Projektowanie

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

rozciągliwej Obraz poprzez kod

imageview.setImageResource(R.drawable.imagename); 

Server obraz

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

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