2014-04-02 110 views
0

任何人都可以請告訴我如何暫停並重新啓動Android中的動畫。如何暫停並重新啓動Android中的動畫?

動畫XML是:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shareInterpolator="false"> 
    <translate 
     android:fromXDelta="500%" android:toXDelta="0%" 
      android:fromYDelta="0%" android:toYDelta="0%" 
      android:duration="10000" 
      android:fillAfter="true" 
       android:repeatCount="infinite"/> 
</set> 

而且代碼:

 Animation am=AnimationUtils.loadAnimation(this, R.anim.note); 
     music1.startAnimation(am); 
+0

請教[此](http://stackoverflow.com/questions/10006736/pause-and-resume-translate-animation)。它有助於me.Hope它幫助你。 – kgandroid

回答

0

有在API級11的功能的確在API級別19增加了暫停/恢復動畫不支持API

您需要做的是爲您想要使用的動畫類型創建子類,然後添加用於暫停和恢復動畫的方法。下面是AlphaAnimation一個例子:

public class PausableAlphaAnimation extends AlphaAnimation { 

    private long mElapsedAtPause=0; 
    private boolean mPaused=false; 

    public PausableAlphaAnimation(float fromAlpha, float toAlpha) { 
     super(fromAlpha, toAlpha); 
    } 

    @Override 
    public boolean getTransformation(long currentTime, Transformation outTransformation) { 
     if(mPaused && mElapsedAtPause==0) { 
      mElapsedAtPause=currentTime-getStartTime(); 
     } 
     if(mPaused) 
      setStartTime(currentTime-mElapsedAtPause); 
     return super.getTransformation(currentTime, outTransformation); 
    } 

    public void pause() { 
     mElapsedAtPause=0; 
     mPaused=true; 
    } 

    public void resume() { 
     mPaused=false; 
    } 
} 

這將不斷增加你的開始時間,而動畫暫停時,有效地將其與整理,並保持它的狀態,當你暫停它。

希望它可以幫助別人。

+0

我不明白如何將該代碼放入我現有的代碼中。你能幫我解決這個問題嗎?我是這個初學者,所以請幫助我。 –

+0

子類您想使用的動畫類型與我一樣,我知道如何更好地幫助您,請goolge獲得更多幫助 – Sree

0

開始動畫之後,您只能調用暫停和恢復方法。

公共類TranslateAnim延伸TranslateAnimation {

public TranslateAnim(float fromXDelta, float toXDelta, float fromYDelta, 
      float toYDelta) { 
     super(fromXDelta, toXDelta, fromYDelta, toYDelta); 
     // TODO Auto-generated constructor stub 
    } 

    private long mElapsedAtPause=0; 
    private boolean mPaused=false; 

    @Override 
    public boolean getTransformation(long currentTime, Transformation outTransformation) { 
     if(mPaused && mElapsedAtPause==0) { 
      mElapsedAtPause=currentTime-getStartTime(); 
     } 
     if(mPaused) 
      setStartTime(currentTime-mElapsedAtPause); 
     return super.getTransformation(currentTime, outTransformation); 
    } 

    public void pause() { 
     mElapsedAtPause=0; 
     mPaused=true; 
    } 

    public void resume() { 
     mPaused=false; 
    } 
相關問題