MotionLayout - 没有事件的动画

MotionLayout - Animate without event

在我想要设置动画的场景中,我有一些由单击事件触发的动画。 但我也有一些我想在后台制作动画并重复播放的片段,这些片段不会被任何东西触发。我可以使用 motionlayout 创建只循环且不需要触发器的动画吗?

据我所知你不能。 MotionLayout 旨在创建一种更简单的方法来为两个场景之间的过渡设置动画,而不是用作视图的动画师。

但您始终可以使用变通方法(这不是 "pretty",是的,我知道):

class AnimationTask(val motionLayout: MotionLayout, val handler: Handler) : Runnable {

    override fun run() {
        if (fragmentOrActivityIsDestroyed) {
            return
        }

        when (motionLayout.currentState) {
            R.id.sceneEnd -> motionLayout.transitionToStart()
            R.id.sceneStart -> motionLayout.transitionToEnd()
        }

        handler.postDelayed(this, yourDelay)
    }
}

Handler(Looper.getMainLooper()).apply {
   postDelayed(AnimationTask(motionLayout, this), yourDelay)
}

编辑

如前所述here

This Layout supports transitions between constraint sets defined in MotionScenes

A MotionLayout is a ConstraintLayout which allows you to animate layouts between various states.