2010-11-06 22 views
5

Android'de animationdrawable yaparken yaygın bir sorun yaşıyorum. Etkinlik başladığında, onCreate() yönteminde bir animasyon başlatmak istedim, ancak birçok kişi bulmuş gibi, işe yaramıyor.Android sorunu için AnimasyonDrawable

Çok sayıda öneri okudum ama hiçbir şey benim için çalışmıyor gibi görünüyor. Animasyonu onClick() 'de başlatırsam işe yarıyorsa, hemen başlamıyor, kullanıcı girişi gerekiyor.

OnCreate() 'da ayrı bir iş parçacığı içinde başlatmayı denedim, ancak bu da çalışmıyor. Burada okuyun:

http://code.google.com/p/android/issues/detail?id=1818

ancak tavsiye hiçbiri işe ya ben bunu anlayamadım.

Birisi yardımcı olabilir mi?

cevap

0

Sağladığınız bağlantıya göre, animasyonu ayrı bir iş parçacığına başlatmanız gerekir. Java'da size yepyeni bir sınıf uygulamak istemiyorsanız ve Runnable arayüzünü uygulayarak

Thread t = new Thread(new MyRunnable()); // MyRunnable inherits Runnable 
t.start(); 

ile başlamanızı ayrıca bu

new Thread(new Runnable() { 
    public void run(){ 
     // some code that runs outside the ui thread. 
    } 
}).start(); 

gibi kod yazabilirsiniz yapmak. İkincisi elbette bu kadar güzel değil ama küçük bir proje yapıyorsanız, bilmek güzel olabilir.

Bu şekilde denediniz mi veya iş parçanıza başka bir şekilde mi başladınız?

Ayrıca, ui iş parçacığı dışındaki eylemleri gerçekleştirmek için hangi olasılıklara sahip olduğunuzu ve kendi iş parçacıklarınızdan ui iş parçacığı üzerinde çalışan yöntemleri nasıl göndereceğinize de bakmanızı sağlayan Painless Threading'u okuyun.


Düzenleme: Eğer onCreate tamamlanana muhtemelen kadar seni iplik başlamadan önce bir süre beklemek zorunda yayınlanmıştır bağlantı incelendikten sonra. the flowchart on this page uyarınca animasyonunuzu daha sonra, örneğin onResume çağrısında başlatabilirsiniz. OnCreate den sonra bir yöntemle başlatmayı denediniz mi?

onCreate'da yalnızca şeyler oluşturmalı ve onStart veya onResume'de "başlat".

3

yerine onCreate() ve onResume() ait) benzer sorunlarla karşı karşıya ve onWindowFocusChanged (geçersiz geçiş yaptıktan:

public void onWindowFocusChanged(boolean hasFocus) 
{ 
    if (hasFocus) 
    { 
     animation.start(); 
    } 
    else 
    { 
     animation.stop(); 
    } 
} 
+0

Bu işler içinde src ayarlamak için

final ImageView tweenImage = (ImageView) findViewById(R.id.imageView1); tweenImage.setBackgroundResource(R.anim.cubicfacetween); tweenImage.post(new Runnable() { @Override public void run() { AnimationDrawable frameAnimation = (AnimationDrawable) tweenImage.getBackground(); frameAnimation.start(); } } 

, ama çoğu insan ne istediklerini yapmak için yeterli kontrol sunmaz sanırım; Örneğin, bir görevin başlamasından önce bir animasyon başlatmak ve daha sonra durdurmak. –

+0

bu işe yarar, ancak 'anim.start()' işlevini “onWindowFocusChanged (true)” dan önce çağırırsam ve sonra tekrar animasyonu çağırırsam buldum.onWindowFocusChanged (true) 'içinden start()' sonra animasyon başlamaz! Yani yapmam gereken, UI durumunu takip etmektir. Bu yüzden Vaiden'de 'if (hasFocus)' bir üye değişkeni ayarlıyorum 'isVisible = true; 've sonraki tüm' anim.start() '' isVisible == true' için ilk kontrol. Çeşitli animasyonları otomatikleştirirken * büyük * PITA. –

1

Sana söz konusu görünümün başlatmasından sonra animasyonu başlatmak zorunda düşünüyorum tamamlandı. Böyle bir şey yapmak mümkün olmalıdır: imageView

((ImageView)findViewById(R.id.no_network_icon)).post(new Runnable() { 
      @Override 
      public void run() { 
       AnimationDrawable drawable = (AnimationDrawable) ((ImageView)findViewById(R.id.no_network_icon)).getDrawable(); 
       drawable.start(); 
      } 
     }); 
+0

Bu Nexus 4, Nexus 5 ve eski Sony Erricson üzerinde çalıştı 2.3 çalıştı. Ama bir HTC One V 4.03 çalıştıran çalışmadı ... Herhangi bir fikir? Animasyonlu görünüm basitçe çizmiyor ... Animasyonu bir renkle değiştirirsem, görünüm gayet iyi görünüyor. Kod snippet'ini – Stephen

+0

gönderin. –

+0

sorunu, Animasyon.xml dosyasının arka plan özelliğinde veya ImageView'ın src özelliğinde ayarlanması arasında çözümlenerek çözüldü. –