LoginSignup
6
9

More than 5 years have passed since last update.

AndroidでAnimatorSetをRepeatするときの注意点

Last updated at Posted at 2016-01-15

ちょっとハマったのでメモ。

AnimatorSetをリピート

Androidで xmlのAnimatorを定義する際、<set> タグの属性でrepeatさせることができない。
なので通常は以下のように繰り返し再生する。

animator.addListener(object : Animator.AnimatorListener {
    override fun onAnimationRepeat(animation: Animator?) {
    }

    override fun onAnimationStart(animation: Animator?) {
    }

    override fun onAnimationCancel(animation: Animator?) {
    }

    override fun onAnimationEnd(animation: Animator?) {
        animation?.start()
    }
})
animator.start()

だがこのままだとアニメーションが終了することができない。
viewを置換したあともAnimationが残り続け、いずれはStackOverflowExceptionを起こす。

var canceled = false
animator.addListener(object : Animator.AnimatorListener {
    override fun onAnimationRepeat(animation: Animator?) {
    }

    override fun onAnimationStart(animation: Animator?) {
        canceled = false
    }

    override fun onAnimationCancel(animation: Animator?) {
        canceled = true
    }

    override fun onAnimationEnd(animation: Animator?) {
        if (!canceled) {
            animation?.start()
        }
    }
})
animator.start()

きちんとキャンセル時の対応を入れてあげればOK。

6
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
9