2010-11-30 103 views
5

我想要做一些簡單的事情,但我不明白爲什麼它不起作用。
我想要做的是:當我觸摸ImageView時,它會顯示一個動畫。然後,只有當動畫結束時它纔會開始新的活動。
相反,會發生什麼情況是新活動馬上開始,並且動畫未顯示。動畫BEFORE活動變化

這裏是動畫的xml:

<rotate android:interpolator="@android:anim/decelerate_interpolator" 
    android:fromDegrees="-45" 
    android:toDegrees="-10" 
    android:pivotX="90%" 
    android:pivotY="10%" 
    android:repeatCount="3" 
    android:fillAfter="false" 
    android:duration="10000" /> 

這是我用來調用它的代碼:

public void onCreate(Bundle savedInstanceState) 
{ 
    final ImageView ib = (ImageView)this.findViewById(R.id.photo); 
    ib.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) 
     { 
      Animation hang_fall = AnimationUtils.loadAnimation(Curriculum.this, R.anim.hang_fall); 
      v.startAnimation(hang_fall); 
      Intent i = new Intent(ThisActivity.this, NextActivity.class); 
      ThisActivity.this.startActivity(i); 
     }// end onClick 
    }); 
}// end onCreate 

正如你看到的我試圖把一個過長...時間的動畫,但它不起作用。 NextActivity立即啓動,它不會等待ThisActivity中的動畫完成。
關於爲什麼發生這種情況的任何想法?

回答

4

那是因爲你開始的意圖,並在同一時間的動畫被賦予。您需要在動畫結束後開始動畫,如下所示:

@Override 
public void onClick(View v) 
{ 
    Animation hang_fall = AnimationUtils.loadAnimation(Curriculum.this, R.anim.hang_fall); 
    hang_fall.setAnimationListener(new Animation.AnimationListener() 
     { 
      public void onAnimationEnd(Animation animation) 
      { 
       Intent i = new Intent(ThisActivity.this, NextActivity.class); 
       ThisActivity.this.startActivity(i); 
      } 

      public void onAnimationRepeat(Animation animation) 
      { 
       // Do nothing! 
      } 

      public void onAnimationStart(Animation animation) 
      { 
       // Do nothing! 
      } 
     }); 
    v.startAnimation(hang_fall); 
}// end onClick 
+0

作爲一種享受,謝謝!我希望在這些問題上有更多的文件。 :) – Stephan 2010-12-01 09:06:31