2010-11-16 12 views
7

Sto provando a fare diverse traduzioni contemporaneamente su Android.Traduzioni simultanee su Android

Ho 2 o più pulsanti su un layout (tutti della stessa dimensione), e quando premo uno voglio che gli altri si spostino dallo schermo.

Ho eseguito un'app di prova per provare a implementare questo comportamento.

Su di esso Ho impostato un ascoltatore su clic di un pulsante per verificare, qualcosa come:

button.setOnClickListener(new View.OnClickListener() { 

    public void onClick(View view) { 
     Button toMove = (Button) findViewById(R.id.button_test2); 
     Button toMove2 = (Button) findViewById(R.id.button_test3); 

     AnimationSet set = new AnimationSet(true); 

     TranslateAnimation anim = new TranslateAnimation(0, -toMove 
      .getWidth(), 0, 0); 
     anim.setFillAfter(true); 
     anim.setDuration(1000); 

     toMove.setAnimation(anim); 
     toMove2.setAnimation(anim); 

     set.addAnimation(anim); 

     set.startNow(); 
    } 

La vista:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <Button android:id="@+id/button_test" android:layout_width="200px" 
     android:layout_height="50px" android:text="@string/hello" /> 

    <Button android:id="@+id/button_test2" android:layout_width="200px" 
     android:layout_height="50px" android:text="@string/hello"/> 

    <Button android:id="@+id/button_test3" android:layout_width="200px" 
     android:layout_height="50px" android:text="@string/hello"/> 

</LinearLayout> 

Il fatto è che i due pulsanti di avviare l'animazione , uno dopo l'altro. Ho letto che è dovuto a getDelayForView() che restituisce diversi ritardi di ciascuno. C'è un modo per spostare 2 o più pulsanti contemporaneamente?

Google non era molto disponibile: - \

risposta

11

Problema:

Sembra che setAnimation sarà acutally avviare l'animazione e, probabilmente, in modo asincrono. Tuttavia potrebbe esserci un blocco sull'impostazione dell'animazione per la seconda vista. Ci deve essere un dispatcher perché l'impostazione dell'animazione per i pulsanti in ordine diverso non influisce sul fatto che quella in basso è più veloce.

La soluzione è impedire questo ipotetico blocco creando due singole animazioni.

Codice:

public void onClick(View view) { 
    Button toMove = (Button) findViewById(R.id.button_test2); 
    Button toMove2 = (Button) findViewById(R.id.button_test3); 

    TranslateAnimation anim = new TranslateAnimation(0, -toMove 
      .getWidth(), 0, 0); 
    anim.setFillAfter(true); 
    anim.setDuration(1000); 

    TranslateAnimation anim2 = new TranslateAnimation(0, -toMove 
      .getWidth(), 0, 0); 
    anim2.setFillAfter(true); 
    anim2.setDuration(1000); 

    //THERE IS ONE MORE TRICK 

    toMove.setAnimation(anim); 
    toMove2.setAnimation(anim2); 
} 

Nota:

Nel //THERE IS ONE MORE TRICK, si potrebbe aggiungere il seguente codice al fine di garantire che si muovono insieme. Ci deve essere ancora un ritardo di 1 millisecondo o giù di lì.

long time =AnimationUtils.currentAnimationTimeMillis(); 

//This invalidate is needed in new Android versions at least in order for the view to be refreshed. 
toMove.invalidate(); 
toMove2.invalidate(); 
anim.setStartTime(time); 
anim2.setStartTime(time); 
+0

questo non funziona modulo ??? –

Problemi correlati