2013-02-12 22 views
20

Quindi Id piace ruotare una manciata di viste tutte allo stesso tempo, tutte usando le stesse specifiche di rotazione. Il problema è che per qualche motivo la rotazione agisce in modo diverso per il secondo elemento. Apparentemente questo ha a che fare con l'oggetto di animazione che cambia effettivamente stato tra quelle due linee di codice. Ovviamente ho potuto solo creare un oggetto di animazione separato e applicarlo, ma mi sento come non c'è un modo più semplice (Ho circa 15 visualizzazioni)Applicare un'animazione a più viste allo stesso tempo

Ruota solo il primo avviso correttamente:

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

Ruota sia correttamente

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 nyone ha qualche idea?

+1

tenta di utilizzare la nuova API di animazione (per uso compatibilità all'indietro NineOldAndroids). Inoltre consiglio di guardare questo: http://www.youtube.com/watch?v=_UWXqFBF86U – Leandros

+0

Adoro il video! Ma quale nuova API, per quanto posso dire, è ciò che ha fatto il ragazzo nel video? (Verso la fine almeno) – Jameo

+1

Video sbagliato, mi dispiace. ;) http://www.youtube.com/watch?v=3UbJhmkeSig – Leandros

risposta

5

Quindi credo che questo proprio non è possibile, così ho creato un metodo di supporto per applicare lo stesso di animazione a un elenco di punti di vista:

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

Sicuramente un hack, ma credo che questo è tutto quello che ho' m in grado di fare in questo momento

+0

In effetti, l'animazione viene eseguita in parallelo, ma è possibile vedere un leggero ritardo durante l'animazione se si guarda da vicino (dal momento che si attivano le animazioni dopo tutto). – Mercury

7

fare in questo modo:

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

Questo non risponde alla domanda, se sono corretto applicate 2 animazioni alla stessa vista. Il post originale vuole applicare la stessa animazione a 2 visualizzazioni –

Problemi correlati