2012-06-29 11 views
13

¿Hay alguna manera de tener la pausa Animation durante medio segundo?Retrasos dentro de la animación (TranslateAnimation)

Estoy tratando de hacer una animación infinita usando la API TranslateAnimation. Por lo tanto, uso el RepeatCount como Infinite. También noté que hay un método setStartOffset(...) que cubre el caso cuando me gustaría tener un retraso para comenzar la animación. Sin embargo, no puedo encontrar una manera de tener un retraso antes de cada 'reinicio'. Como la animación va a suceder infinita cantidad de veces, cada vez que la animación se reinicie necesito poner un retraso en.

¿Alguna idea?

Gracias!

+0

Quizás intente ponerlo en un hilo que comience la animación, duerma durante x cantidad de tiempo, y luego comience la animación, en lugar de usar infinito. – Guardanis

Respuesta

11

aquí es un ejemplo:

En primer lugar la disposición (main.xml) con una imagen que nos gustaría animar:

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

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_launcher" /> 

</LinearLayout> 

A continuación se muestra la animación. Colocado en res/anim y se llama anim_img.xml. El archivo contiene la animación de traducción con Android: startOffset = "500" (en milisegundos). Esto establecerá el desplazamiento, que se usa cada vez que se inicia la animación:

<?xml version="1.0" encoding="utf-8"?> 
<set> 

    <translate 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:duration="1000" 
     android:fromXDelta="0%" 
     android:fromYDelta="0%" 
     android:toXDelta="0%" 
     android:toYDelta="100%" 
     android:zAdjustment="top" 
     android:repeatCount="infinite" 
     android:startOffset="500"/> 

</set> 

Y por último pero no menos importante: la actividad. Que comienza la animación:

public class StackOverflowActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     ImageView iv_icon = (ImageView) findViewById(R.id.imageView1); 

     Animation a = AnimationUtils.loadAnimation(this, R.anim.anim_img); 
     a.setFillAfter(true); 
     a.reset(); 

     iv_icon.startAnimation(a); 
    } 
} 

Cheers, Paul

+0

¡Gracias! Voy a intentarlo e informaré si este enfoque ha funcionado ... – ymotov

9

Para lograr una pausa de milisegundos x entre cada reinicio:

myAnimation.setAnimationListener(new AnimationListener(){ 

     @Override 
     public void onAnimationStart(Animation arg0) { 
     } 
     @Override 
     public void onAnimationEnd(Animation animation) { 
     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      myAnimation.setStartOffset(x); 
     } 

    }); 
+0

¡Eso es genial, gracias! – nurxyz

0

myanimation.setStartDelay (int);

+0

¿Dónde encontraste ese método? – hrules6872

+1

@h_rules él probablemente quiere decir 'setStartOffset (long)'. –

+2

Se debe invocar en la vista. 'view.animate(). setDuration (1000) .setStartDelay (500);' – Yurets

Cuestiones relacionadas