2012-11-29 14 views
9

Czy na ImageView jest onImageChangedListener()?ImageView onImageChangedListener Android

Potrzebuję zdarzenia, gdy obraz zostanie zmieniony z ImageView.

+0

W jaki sposób zmienia się obraz? – Simon

+0

Obraz zostanie zmieniony naButtonClick, wybierając go z aparatu lub karty SD. – Naskov

+0

Mam na myśli dokładnie, jak zmieniasz obraz? setImageBitmap? setImageDrawable? Inny? – Simon

Odpowiedz

3

Sprawdź kod ImageView w grepcode. Nie wiesz, kiedy zostanie zmieniony lub przerysowany. Dzieje się tak dlatego, że po ustawieniu imageImageDrawable() widok obrazu zostanie unieważniony. W tej chwili obraz NIE ZMIENIA się poprawnie, dopóki nie zostanie wywołany ondraw.

W każdym razie, dlaczego chcesz wiedzieć, na czym polega onimagechangedlistener?

22

Nie ma domyślnego słuchacz w Androidzie .. ale możemy stworzyć listiner imagechange .. skopiuj klasę i zamiast używać use ImageView MyImageView ..

public class MyImageView extends ImageView { 

     private OnImageChangeListiner onImageChangeListiner; 


     public MyImageView(Context context) { 
      super(context); 
     } 

     public MyImageView(Context context, AttributeSet attributeSet) {   
      super(context, attributeSet); 
     } 


     public void setImageChangeListiner(
       OnImageChangeListiner onImageChangeListiner) { 
      this.onImageChangeListiner = onImageChangeListiner; 
     } 

     @Override 
     public void setBackgroundResource(int resid) { 
      super.setBackgroundResource(resid); 
      if (onImageChangeListiner != null) 
       onImageChangeListiner.imageChangedinView(this); 
     } 


     @Override 
     public void setBackgroundDrawable(Drawable background) { 
      super.setBackgroundDrawable(background); 
      if (onImageChangeListiner != null) 
       onImageChangeListiner.imageChangedinView(this); 
     } 


     public static interface OnImageChangeListiner { 
      public void imageChangedinView(ImageView mImageView); 
     } 
    } 
+0

Co mam zaimportować, aby "OnImageChangeListiner nie mógł zostać rozwiązany na typ"? – Naskov

+0

skopiuj tę klasę w dowolnym pakiecie ... import nazwa pakietu.MyImageView; – Sandy09

+0

Powinieneś zaimplementować interfejs w swoim działaniu i zastąpić imageChangedInView(). 'extends Activity implements OnImageChangeListiner' – Simon

0

Jeśli chcesz załadować obraz z sieci i sprawdzić zmianę w widoku obrazu, możesz użyć imageView.isAttachedToWindow(). Próbowałem pobrać obraz z sieci i wyłączyłem pasek postępu po pobraniu i dołączeniu obrazu do okna. Użyj,

  if(imageView.isAttachedToWindow()){ 
      //your code here 
      }