2012-05-02 14 views
5

Vorrei applicare un'animazione di dissolvenza a un ImageView per creare l'effetto che l'immagine, che viene caricata da un url, si dissolva quando il download è completato.Come dissolvenza in immagine in ImageView caricato dall'URL

So come scaricare un'immagine da un url a un ImageView, come in this answer, e so come applicare un'animazione di dissolvenza ad un imageView like here.

Questo tentativo

Drawable d = ImageUtils.fetchDrawable("the url"); 
imageView.setImageDrawable(d); 
imageView.startAnimation(fadeInAnimation); 

si traduce in un effetto di lampeggio (vedi, non vedono, fade in per vedere). L'inversione dell'ordine delle due ultime righe si traduce anche in un battito di ciglia.

Googled e cercato SO per una soluzione sotto forma di un callback/ascoltatore - qualcosa di simile:

imageView.setOnLoadCompleteListener... 

per registrare il carico evento complete in ImageView, ma non ho trovato nulla lungo quelle linee.

Sarei grato per qualsiasi suggerimento di una soluzione su come implementare questo effetto.

risposta

2

impostare la visibilità ImageView a INVISIBLE o GONE impostare setAnimationListener sulla vostra animazione. e quando lo onAnimationEnd cambia la visibilità dello ImageView.

fadeInAnimation.setAnimationListener(new AnimationListener() { 
     @Override 
     public void onAnimationEnd(Animation arg0) { 

      // let make your image visible 


     } 

     @Override 
     public void onAnimationRepeat(Animation animation) {} 
     @Override 
     public void onAnimationStart(Animation animation) {} 
    }); 
+0

Grazie per la risposta rapida. Funziona perfettamente. –

29

È possibile utilizzare: TransitionDrawable, semplice codice come segue:

 // Transition drawable with a transparent drwabale and the final bitmap 
     final TransitionDrawable td = 
       new TransitionDrawable(new Drawable[] { 
         new ColorDrawable(Color.TRANSPARENT), 
         new BitmapDrawable(mResources, bitmap) 
       }); 
     // Set background to loading bitmap 
     imageView.setBackgroundDrawable(
       new BitmapDrawable(mResources, mLoadingBitmap)); 

     imageView.setImageDrawable(td); 
     td.startTransition(FADE_IN_TIME); 
+0

grazie, proverò. –

+6

Funziona alla grande, se hai già un'altra immagine in ImageView come segnaposto puoi chiamare getDrawable() e usarla al posto di Transparent ColorDrawable che creerà una transizione tra le due immagini. – Raanan

+2

Per abilitare la dissolvenza incrociata tra 2 immagini utilizzare td.setCrossFadeEnabled (true), perché la dissolvenza incrociata è disabilitata per impostazione predefinita. – moondroid

Problemi correlati