2013-06-25 163 views
6

我有一個ImageView,我正在旋轉以用作加載動畫。加載數據後,我會嘗試停止動畫,但不是循環到最後,然後停止,動畫進入中途點,然後停止,然後圖像恢復到原始狀態,這看起來很醜陋。如何在循環結束時停止動畫?

這裏是我試過:

選項1:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
if (iv != null) { 
    iv.clearAnimation(); 
} 

選項2:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
if (iv != null && iv.getAnimation() != null) { 
    iv.getAnimation().cancel(); 
} 

方案3:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
if (iv != null && iv.getAnimation() != null) { 
    iv.getAnimation().setAnimationListener(new AnimationListener() { 

     @Override 
     public void onAnimationStart(Animation animation) { 

     } 

     @Override 
     public void onAnimationRepeat(Animation animation) { 
      animation.cancel(); 

     } 

     @Override 
     public void onAnimationEnd(Animation animation) { 

     } 
    }); 
} 

最終的結果是在所有三種情況下都是一樣的。我該如何旋轉圖像並讓它最終回到它開始的位置?

編輯:

一些進一步的信息:我的旋轉動畫:

<?xml version="1.0" encoding="utf-8"?> 
<rotate xmlns:android="http://schemas.android.com/apk/res/android" 
android:duration="1000" 
android:fromDegrees="0" 
android:interpolator="@android:anim/linear_interpolator" 
android:pivotX="50%" 
android:pivotY="50%" 
android:toDegrees="360" /> 

如何啓動動畫:

ImageView iv = (ImageView) findViewById(R.id.refreshImage); 
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotate); 
rotation.setRepeatCount(Animation.INFINITE); 
iv.startAnimation(rotation); 

回答

14

設置你開始之前,動畫repeatcount到無窮大,則當動作結束時,將動畫的重複計數設置爲0.動畫將完成當前循環和沒有跳躍的停止,您要避免。

//How you start 
Animation rotation = AnimationUtils.loadAnimation(this, R.anim.rotate); 
      rotation.setRepeatCount(Animation.INFINITE); 
iv.startAnimation(rotation); 

//You do your stuff while it spins 
... 

//You tell it not to repeat again 
rotation.setRepeatCount(0); 

重要的是,首先將其設置爲Animation.INFINITE(或-1,因爲他們做的是相同的),然後0,如果你把它設置爲1000的實例,則它不會按停止某種原因,我測試。

+0

我的一些動畫仍然有點跳動,但它適用於大多數人,謝謝! – Catherine

+2

@Catherine它可能看起來很動感,同時發生多件事情,但沒有測試過,但對於簡單的動畫來說,這是要走的路。 –

+0

感謝您的好招。如果Android提供了api stopAfterCycleCompletion()或類似的東西,會更好。 – rpattabi

-2

iv.clearAnimation();停止動畫