2014-04-02 73 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; 
    } 
相关问题