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.
在我想要设置动画的场景中,我有一些由单击事件触发的动画。 但我也有一些我想在后台制作动画并重复播放的片段,这些片段不会被任何东西触发。我可以使用 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.