暂停和恢复翻译动画

Par*_*ari 2 java android android-animation

我正在使用翻译动画来移动ImageView.我正在使用此代码:

TranslateAnimation set1 = new TranslateAnimation(-4, 10, -110, 0);
        set1.setDuration(3000);
        TranslateAnimation set2 = new TranslateAnimation(10, -3, 0, 115);
        set2.setDuration(3000);
        set2.setStartOffset(2200);
        TranslateAnimation set3 = new TranslateAnimation(-3, -20, 0, -100);
        set3.setDuration(3000);
        set3.setStartOffset(4500);
        TranslateAnimation set4 = new TranslateAnimation(0, 13, 0, -120);
        set4.setDuration(3000);
        set4.setStartOffset(6500);

        animSet.addAnimation(set1);
        animSet.addAnimation(set2);
        animSet.addAnimation(set3);
        animSet.addAnimation(set4);

        animSet.setFillAfter(true);
Run Code Online (Sandbox Code Playgroud)

创建一组动画后,我将它们应用于ImageView以下内容:

image = (ImageView)findViewById(R.id.img);
        image.startAnimation(animSet);
Run Code Online (Sandbox Code Playgroud)

一切都运行正常,但我不能暂停动画并继续点击按钮.

我怎样才能做到这一点?

我尝试了一切,但没有成功.知道怎么做吗?

请帮忙!

Dee*_*pak 7

搜索一段时间后,我发现这个链接并检查这是否适用于翻译动画,经过一些修改后,这也适用于你的动画.

见下面的修改代码:

public class TranslateAnim extends 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我只会更改类名,扩展该类的类名和构造函数.

你可以使用它:

TranslateAnim set1, set2, set3, set4; // objects of TranslateAnim Class

set1 = new TranslateAnim(-4, 10, -110, 0); // initialize all objects like this way

animSet.addAnimation(set1); // add all animation objests in your animation set as you do before

animSet.setFillAfter(true);
Run Code Online (Sandbox Code Playgroud)

并且在开始动画之后,您只有呼叫暂停和恢复方法.感谢Johan与我们分享他的代码.

希望这能解决你的问题.:)