2012-01-27 22 views
9

10 adet resimim var ve aralarında solmaya çalıştığım bir animasyon oluşturmak istiyorum. Böyle bir şeye ulaşmak için yerleşik Drawable'a baktım ama bu kısımda şans yok. Resimler arasında geçiş yapan AnimationDrawable var, ancak geçişi canlandırmıyor. TransitionDrawable var, iki resim arasında çapraz geçiş var, ancak ikiden fazla değil.Bir AnimasyonDrawable'a geçiş ekleme

Cehennem.

Google'da bir çözüm aradım ancak bu kısımda şans yok. Bu yüzden böyle bir şeye ulaşmak için kendi çekilişimi uygulamayı düşünüyorum. Herhangi bir işaretçiniz var mı?

Şimdiden teşekkürler.

cevap

15

Buna bir yanıt bulup bulmadığınızdan emin değilim, ancak aynı problemi yaşadım ve TransitionDrawable'a dayanarak kendi sınıfımı oluşturmayı bitirdim.

Kullanımı:

CyclicTransitionDrawable ctd = new CyclicTransitionDrawable(new Drawable[] { 
    drawable1, 
    drawable2, 
    drawable3, 
    ... 
}); 

imageView.setImageDrawable(ctd); 

ctd.startTransition(1000, 3000) // 1 second transition, 3 second pause between transitions. 

CyclicTransitionDrawable için kod available on Github olduğunu.

+0

Eh ben bile :-) yaptılar Ama çözüm güzel ve temiz görünüyor hatırlamıyorum , o zaman cevap olarak işaretleyelim! – Redwarp

+0

Bunu sadece bir döngü için yapmanın bir yolu var mı? – Andy

+0

Şu anda döngü sayısını sınırlamanın bir yolu yoktur. Eklenebilir olsa da (bellekten) sanırım bunu başarmak için orijinal TransitionDrawable sınıfını kullanabilirsiniz. –

10

Eh. Uzun zaman geçti ve muhtemelen sorunu çözdünüz, ancak AnimationDrawable için setEnterFaceDuration() ayarını aldınız. Örnek: Eğer 1..N görüntüler yoluyla kolay bir bisiklet var bu kod ile

mBackgroundAnimation = new AnimationDrawable(); 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background1), 5000); 
// ... rest of the frames 
mBackgroundAnimation.addFrame(getResources().getDrawable(R.drawable.background6), 5000); 
mBackgroundAnimation.setEnterFadeDuration(1000); 
mBackgroundAnimation.setOneShot(false); 

, her biri fade-in animasyon ile 5s (5000ms) kalır. Şimdi, ben

mLayoutRoot.setBackground(mBackgroundAnimation); 
mLayoutRoot.post(new AnimationStarterThread()); 

Ve AnimationStarterThread sınıfının RelativeLayout benim kökü arka planını ayarlıyor ne

private class AnimationStarterThread implements Runnable { 
    public void run() { 
     if(mBackgroundAnimation != null) 
      mBackgroundAnimation.start(); 
    } 
}