2013-02-12 30 views
20

Aynı şeyleri aynı döndürme özelliklerini kullanarak aynı anda bir avuç görüntüyü döndürmeyi de tercih edin. Sorun, bir sebepten dolayı rotasyonun ikinci eleman için farklı davranmasıdır. Görünüşe göre bu, aslında bu iki satır kod arasında değişen durumu değiştiren animasyon nesnesi ile ilgilidir. Açıkçası ben sadece ayrı Animasyon nesnesi oluşturmak ve uygulamak, fakatAynı anda birden çok görüntülemeye bir animasyon uygulayın

döndürür sadece ilk bakış doğru daha kolay bir yolu (yaklaşık 15 görüşlere sahip) var gibi ben hissediyordu:

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
target.startAnimation(rotateAnim); 
lightBtn.startAnimation(rotateAnim); 

hem doğru döndürür

Animation rotateAnim = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
Animation rotateAnim2 = AnimationUtils.loadAnimation(this, R.anim.rotationtoportrait); 
target.startAnimation(rotateAnim); 
lightBtn.startAnimation(rotateAnim2); 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<rotate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:fromDegrees="-90" 
    android:toDegrees="0" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:duration="500" android:fillAfter="true"> 

A Nothing herhangi bir fikrin var mı? Yani

+1

deneyin. Ayrıca bunu izlemenizi öneririm: http://www.youtube.com/watch?v=_UWXqFBF86U – Leandros

+0

Videoyu seviyorum! Ama ne diyebileceğime kadar yeni API ne videodaki adam yaptı? (Sonuna doğru) – Jameo

+1

Yanlış video, üzgünüm. ;) http://www.youtube.com/watch?v=3UbJhmkeSig – Leandros

cevap

5

bunun sadece mümkün değil sanırım, o yüzden görüşlerin bir listeye aynı animasyon uygulamak için bir yardımcı yöntemi yarattı: Kesinlikle

public void doRotations(ArrayList<View> views, int start, int end, int xprop, float xscale, int yprop, float yscale, int duration, Boolean fillAfter){ 

    for(int i = 0; i < views.size(); i++){ 
     RotateAnimation temp = new RotateAnimation(start, end, xprop, xscale, yprop, yscale); 
     temp.setDuration(duration); 
     temp.setFillAfter(fillAfter); 
     views.get(i).startAnimation(temp); 
    } 
} 

kesmek, ama Thats Ben hepten tahmin Şu anda yapmak mümkün m

+0

Bu aslında animasyonu paralel olarak çalıştırır, ancak yakından bakarsanız animasyonları birazcık gecikme olarak görebilirsiniz (çünkü animasyonları her şeye rağmen tetiklersiniz). – Mercury

7

şöyle yapın: (geriye doğru uyumluluk kullanım NineOldAndroids için) yeni Animasyon API kullanmak için

ObjectAnimator anim = ObjectAnimator.ofFloat(view, "y", 100f); 
arrayListObjectAnimators.add(anim); 

ObjectAnimator anim1 = ObjectAnimator.ofFloat(view, "x", 0f); 
arrayListObjectAnimators.add(anim1); 

ObjectAnimator[] objectAnimators = arrayListObjectAnimators.toArray(new ObjectAnimator[arrayListObjectAnimators.size()]); 
AnimatorSet animSetXY = new AnimatorSet(); 
animSetXY.playTogether(objectAnimators); 
animSetXY.duration(1000); 
animSetXY.start(); 
+3

Bu soruya cevap vermiyor, Eğer haklıysam aynı görünüme 2 animasyon uyguluyorsunuz. Orijinal yayın aynı animasyonu 2 görünüme uygulamak istiyor –

İlgili konular