2012-06-29 20 views
13

C'è un modo per avere la pausa Animation per mezzo secondo?Ritardi nell'animazione (TranslateAnimation)

Sto cercando di creare un'animazione infinita utilizzando l'API TranslateAnimation. Quindi, io uso il RepeatCount come Infinite. Ho anche notato che esiste un metodo setStartOffset(...) che copre il caso in cui mi piacerebbe avere un ritardo nell'avvio dell'animazione. Tuttavia, non riesco a trovare un modo per avere un ritardo prima di ogni 'riavvio'. Poiché l'animazione avverrà infinite volte, ogni volta che si riavvia l'animazione devo inserire un ritardo.

Qualche idea?

Grazie !!

+0

Forse prova a metterlo in una discussione che avvierà l'animazione, dormirà per x quantità di tempo, quindi avvierà l'animazione, invece di usare infinito? – Guardanis

risposta

11

ecco un esempio:

primo layout (main.xml) con un'immagine vorremmo animare:

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

uno successivo è l'animazione. Inserito in res/anim e si chiama anim_img.xml. Il file contiene l'animazione di traduzione con Android: startOffset = "500" (in millisec). Questo imposterà l'offset, che viene utilizzato ogni volta che inizia l'animazione:

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

E, ultimo ma non meno importante - l'attività. Che inizia l'animazione:

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

Salute, Paul

+0

Grazie! Ci proverò e riferirò se questo approccio ha funzionato ... – ymotov

9

Per ottenere una pausa di x millisecondi tra ogni riavvio:

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

È grandioso, grazie! – nurxyz

0

myanimation.setStartDelay (int);

+0

Dove hai trovato quel metodo? – hrules6872

+1

@h_rules probabilmente significa 'setStartOffset (long)'. –

+2

Deve essere chiamato sulla vista. . 'View.animate() setDuration (1000) .setStartDelay (500);' – Yurets

Problemi correlati