2012-05-02 17 views
5

Me gustaría aplicar una animación de fundido de entrada a una ImageView para crear el efecto de que la imagen, que se carga desde una url, se desvanece cuando se completa la descarga.Cómo fundir una imagen en ImageView cargado desde la url

Sé cómo descargar una imagen de una url a una ImageView, como en this answer, y sé cómo aplicar una animación de fundido de entrada en una imageView like here.

Este intento

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

como resultado un efecto de parpadeo (ver, no ver, fade in para ver). Invertir el orden de las dos últimas líneas también produce un parpadeo.

He buscado en Google y busqué SO para una solución en forma de una devolución de llamada/oyente - algo como esto:

imageView.setOnLoadCompleteListener... 

para registrar el evento completo de carga en ImageView pero no he encontrado nada a lo largo de esas líneas

Agradecería cualquier sugerencia sobre cómo implementar este efecto.

Respuesta

2

establecer la visibilidad ImageView a INVISIBLE o GONE conjunto setAnimationListener en su animación. y cuando el onAnimationEnd cambia la visibilidad del 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

Gracias por la respuesta rápida. Funciona perfectamente. –

29

Se puede utilizar: TransitionDrawable, código simple de la siguiente manera:

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

gracias, lo probaré. –

+6

Esto funciona muy bien, si ya tiene otra imagen en el ImageView como marcador de posición, puede llamar a getDrawable() y usarla en lugar de ColorDrawable transparente que creará una transición entre las dos imágenes. – Raanan

+2

Para habilitar el fundido cruzado entre 2 imágenes, use td.setCrossFadeEnabled (true), porque el fundido cruzado está deshabilitado de manera predeterminada. – moondroid

Cuestiones relacionadas