启动然后在android中暂停动画

时间:2013-04-19 05:35:37

标签: java android animation

我有一个圆形布局,此布局中有“n”个按钮。我在活动开始时在该布局上开始动画。

当我点击任何按钮时,动画应该停止,并出现一个对话框,显示消息“你已经点击了这个'XYZ'按钮”。

我正在使用的代码:

    animation = AnimationUtils.loadAnimation(this, R.anim.rotate);
    animation.setFillEnabled(true);
    animation.setFillAfter(true);
    findViewById(R.id.circle_layout).startAnimation(animation);

和动画XML:

<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="15000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:toDegrees="360" >

3 个答案:

答案 0 :(得分:1)

android中的动画中没有pause。我在StackOverflow上检查了很多与此相关的问题,但没有运气。您仍然可以尝试使用此link暂停Activity本身,这可能有所帮助。 该链接指出以下内容:

暂停您的活动

当系统为您的活动调用onPause()时,它在技术上意味着您的活动仍然部分可见,但大多数情况下表明用户正在离开活动并且很快将进入Stopped状态。您通常应该使用onPause()回调:

  1. 停止可能消耗CPU的动画或其他正在进行的操作。
  2. 提交未保存的更改,但前提是用户希望此类更改在离开时永久保存(例如草稿电子邮件)。
  3. 释放系统资源,例如广播接收器,传感器处理(如GPS),或在您的活动暂停且用户不需要时可能影响电池寿命的任何资源。

答案 1 :(得分:1)

发布没有暂停。但你可以模仿它。

这个答案对我有用: How do I pause frame animation using AnimationDrawable?

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;
    }
}

请注意:这在技术上并不是“暂停”动画,因为它会不断调用转换。但是可以保持持久的转变,“模仿”相同的功能。

我用RotateAnimation尝试了这个并且工作得很好。但是,当它取消动画时“暂停”时,它不会降低CPU /帧速率。

答案 2 :(得分:0)

没有很好的方法可以在周期中暂停动画。

您可以将RotateAnimation子类化并拦截getTransformation中的currentTime值,并在您希望暂停动画的同时将其同时输入。

如果您只能支持HC +,那么您应该考虑使用属性动画而不是查看动画。