2012-05-02 16 views
5

Chciałbym zastosować animację wejścia do ImageView, aby stworzyć efekt, że obraz, który jest ładowany z adresu URL, rozjaśnia się po zakończeniu pobierania.Jak znikać w obrazie w ImageView załadowanym z adresu URL

Wiem, jak pobrać obraz z adresu URL do ImageView, jak w this answer, i wiem, jak zastosować animację wejścia do obrazuView like here.

Ta próba

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

skutkuje efektem mrugania (zob nie zobaczyć, fade, aby zobaczyć). Odwrócenie kolejności dwóch ostatnich linii powoduje również mignięcie.

Mam googled i przeszukiwane SO do roztworu w postaci zwrotnej/słuchacza - coś takiego:

imageView.setOnLoadCompleteListener... 

do rejestracji ładowania pełną wydarzenie w ImageView ale nie znalazłem nic wzdłuż te linie.

Byłbym wdzięczny za wszelkie wskazówki dotyczące rozwiązania tego sposobu wdrożenia tego efektu.

Odpowiedz

2

ustawić widoczność ImageView do INVISIBLE lub GONE ustawić setAnimationListener na animacji. i kiedy onAnimationEnd zmienia widoczność .

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

Dziękuję za szybką odpowiedź. Działa świetnie. –

29

Można użyć: TransitionDrawable, prosty kod w następujący sposób:

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

dzięki, wypróbuje to. –

+6

Działa to świetnie, jeśli masz już inny obraz w ImageView jako symbol zastępczy, który możesz wywołać getDrawable() i użyć go zamiast przezroczystej ColorDrawable, która utworzy przejście między dwoma obrazami. – Raanan

+2

Aby włączyć przenikanie między 2 obrazami, użyj td.setCrossFadeEnabled (true), ponieważ przenikanie jest domyślnie wyłączone. – moondroid

Powiązane problemy