2012-03-30 18 views
24

Tamam, birden fazla ImageView içeren bir etkinliğim var ve üzerine tıkladığınızda ImageView sönecek ve geri dönecektir. bir ImageView'a tıklayıp animasyonu nasıl başlatabildiğimi ve bir 2. düğmesine tıkladığımda ve animasyon hala devam ettiğimde, ikincisini görmezden geleceğim. AnimasyonListener ile bir şeyler yapmam gerektiğini düşünüyorum, ancak yeni bir animasyon başlatmadan önce, animasyonun çalışıp çalışmadığını kontrol etmek için bunu nasıl kullanacağımı anlayamıyorum. Yemin edebilirdim bunu yapan bir örnek gördüm ama günlerdir aradım ve artık bulamadım, umarım birileri burada yardım edebilirdi ..... aşağıda benim için animasyonu:ANDROID - animasyonun yeni animasyonu başlatmadan önce çalışıp çalışmadığını görmek için nasıl kontrol edeceğiniz

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

cevap

29

ben hem fadeout farz ediyorum ve fadein Animation nesnelerdir.

Birinciye başlamadan önce birincinin bitip bitmediğini kontrol etmek için fadeout.hasEnded()'u kullanın. Animation sınıfı hakkında daha fazla ayrıntı için

buraya bakın: http://developer.android.com/reference/android/view/animation/Animation.html

+5

Animasyon henüz çalışmadığında ne olur, bu yanlış bir sonuç döndürmez, böylece animasyonu iptal etmez. Bir şans vereceğim ama aklıma gelen ilk düşünce budur. Yardımın için teşekkürler. –

+0

Bu yaptı, sadece sözdizimi birkaç şeyi değiştirmek zorunda kaldı ve harika çalıştı. Yardımı gerçekten takdir ediyorum. Çok teşekkürler! –

+1

@ChrisD Aynı sorunla karşı karşıyayım. HasEnded() işlevini kullanarak kontrol ettim ancak sorun ilk kez her zaman yanlış döndürülüyor. Bana yardım edermisin? – Kunu

2

yerine bir animasyon sona ermişse böyle bir şey yapıyor, bir animasyon dinleyici kullanabilirsiniz kontrol başka bir iş parçacığı muhtemelen döngü zorunda:

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

} 

Bu tür bir çözümle, bir animasyonun bitip bitmediğini ve önceki animasyonun süresiyle zamana bağlı olup olmadığını aktif olarak kontrol etmeniz gerekmez.

OnAnimationEnd (Animasyon), animasyon sona erdikten hemen sonra tetiklenir. Bu, "açık" geliştirici seçenekleri ve "kapalı" olarak ayarlanan animasyon hızı olan kullanıcıların sayısını da çözer.

İlgili konular