2013-02-12 29 views
20

Tak więc chciałbym obrócić garść widoków w tym samym czasie, wszystkie przy użyciu tej samej specyfikacji obrotu. Problem polega na tym, że z jakiegoś powodu rotacja działa inaczej dla drugiego elementu. Najwyraźniej ma to związek z obiektem animacji, który faktycznie zmienia stan pomiędzy tymi dwoma liniami kodu. Oczywiście mogę tylko tworzyć oddzielny obiekt animacji i stosuje się go, ale czuję, że jest łatwiejszy sposób (mam około 15 wyświetleń)Zastosuj jedną animację do wielu widoków w tym samym czasie

Obraca się tylko pierwszy widok poprawnie:

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

Obraca zarówno poprawnie

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"> 

nyone ma jakieś pomysły?

+1

Spróbuj użyć nowego API animacji (do wykorzystania do tyłu kompatybilności NineOldAndroids). Polecam również obejrzeć: http://www.youtube.com/watch?v=_UWXqFBF86U – Leandros

+0

Uwielbiam wideo! Ale co nowego API, o ile mogę to powiedzieć, to co zrobił facet w filmie? (Przynajmniej pod koniec) – Jameo

+1

Zły film, przepraszam. ;) http://www.youtube.com/watch?v=3UbJhmkeSig – Leandros

Odpowiedz

5

Więc myślę, że to po prostu nie jest możliwe, więc stworzyłem metody pomocnika po prostu zastosować tę samą animację do listy widoków:

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

zdecydowanie siekać, ale myślę, że to wszystko co mam” m stanie zrobić teraz

+0

To rzeczywiście uruchamia animację równolegle, ALE widzisz nieznaczne opóźnienie między animacjami, jeśli przyjrzysz się uważnie (skoro w końcu uruchamiasz animacje skośnie). – Mercury

7

Czy to tak:

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

Nie odpowiada to na pytanie: Jeśli mam rację, stosujesz 2 animacje w tym samym widoku. Oryginalny post chce zastosować tę samą animację do 2 widoków –