2012-03-30 7 views
24

OK, więc mam działanie, w którym mam wiele ImageViews, a po kliknięciu na niego ImageView zaniknie i zniknie z powrotem. Co próbuję aby dowiedzieć się, w jaki sposób mogę kliknąć jeden ImageView i rozpocząć animację, a gdy kliknę drugą, animacja będzie nadal działać, a druga zignoruje. Myślę, że muszę coś zrobić z animacjąListener, ale nie mogę wymyślić, jak użyć tego do sprawdzenia, czy animacja działa, czy nie, zanim zainicjuję nową animację. Mógłbym przysiąc, że widziałem przykład, który to zrobił, ale szukałem już dni i nie mogę go już znaleźć, mam nadzieję, że ktoś mógłby pomóc tutaj ..... poniżej jest kod dla mojego animacja:ANDROID - jak sprawdzić, czy animacja jest uruchomiona przed rozpoczęciem nowej animacji

// Create Animation 
protected void fadeAnimation() { 
    tempImg.startAnimation(fadeout); 
    //Allow animation to finish 
    mHandler.postDelayed(new Runnable() { 
     public void run() { 
     tempImg.startAnimation(fadein); 
     } 
    }, 1000); 
} 

Odpowiedz

29

jestem zakładając zarówno fadeout i fadein są Animation obiekty.

Użyj fadeout.hasEnded(), aby sprawdzić, czy pierwsza zakończyła się przed uruchomieniem drugiej.

Więcej informacji na temat klasy Animation, zobacz tutaj: http://developer.android.com/reference/android/view/animation/Animation.html

+5

co się dzieje, gdy animacja jeszcze nie została uruchomiona, więc nie spowoduje to, że zwróci fałszywy wynik, a zatem anuluje animację. Zrobię to, ale to pierwsza myśl, która przyszła mi do głowy. Dzięki za pomoc w każdy sposób. –

+0

To wystarczyło, po prostu musiałem zmienić kilka rzeczy w składni i wszystko działało świetnie. Naprawdę doceniam pomoc. Wielkie dzięki! –

+1

@ChrisD Stoję w obliczu tego samego problemu. Sprawdziłem przy użyciu funkcji hasEnded() , ale problem po raz pierwszy zawsze zwraca false. Czy możesz mi pomóc? – Kunu

2

Zamiast pętli ewentualnie w innym wątku sprawdzenie czy animacja została zakończona, można użyć słuchacza animacji, robi coś takiego:

// Create Animation 
protected void fadeAnimation() { 
    fadeout.setAnimationListener(new Animation.AnimationListener(){ 
     @Override 
     public void onAnimationStart(Animation animation) { 

     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
       tempImg.startAnimation(fadein); 
     }    
     @Override 
     public void onAnimationRepeat(Animation animation) { 

     } 

    }; 
    tempImg.startAnimation(fadeout); 

} 

Za pomocą tego rodzaju rozwiązania nie trzeba aktywnie sprawdzać, czy animacja została zakończona i czas ten był dłuższy niż czas trwania poprzedniej animacji.

OnAnimationEnd (Animacja) jest uruchamiany zaraz po zakończeniu animacji. Rozwiązuje to również problem użytkowników z opcjami deweloperskimi "włączony", a prędkość animacji ustawioną na "wyłączone".

Powiązane problemy