Androidプログラマへの道 〜 Moonlight 明日香 〜 - アニメーションを停止/再実行する
Property Animation(API Level 11)において, アニメーションの実行をキャンセルするには, アニメータ(animation.Animator)クラスを利用する.

アニメーションの停止/再実行(API Level 19)

  • Animation01.java
    • Animator#isRunningメソッドで, アニメーション実行中か否か確認する.
    • Animator#pauseメソッドで, アニメーションの実行を一時停止する.
    • Animator#isPausedメソッドで, アニメーションを一時停止中か否か確認する.
    • Animator#resumeメソッドで, アニメーションを再実行する.
package com.moonlight_aska.android.work.animation01;

import android.animation.AnimatorInflater;
import android.animation.AnimatorSet;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {
  private AnimatorSet mSet = null;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mageView img = (ImageView) findViewById(R.id.robot);
    mSet = (AnimatorSet) AnimatorInflater.loadAnimator(this, R.animator.repeat);
    mSet.setTarget(img);
    mSet.start();
  }

  // Pauseボタンの処理
  public void onPauseListener(View view) {
    if (mSet != null) {
      if (mSet.isRunning()) {
        mSet.pause();
      }
    }
  }

  // Resumeボタンの処理
  public void onResumeListener(View view) {
    if (mSet != null) {
      if (mSet.isPaused()) {
        mSet.resume();
      }
    }
  }
}
  • res/animator/repeat.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
  <objectAnimator
    android:interpolator="@android:anim/decelerate_interpolator"
    android:propertyName="rotation"
    android:duration="5000"
    android:valueFrom="0"
    android:valueTo="360"
    android:repeatCount="10"
    />
</set>