如何像TransitionManager一样使用MotionLayout?

How to use MotionLayout like TransitionManager?

Tutoiral 我看到 MotionLayout 有一些共同点,那就是它专注于 onClickonSwipe 来触发 MotionLayout 过渡。我想知道如何使用其他触发器从状态 A 转换到状态 B,而不是 onClick 它将触发 onNavDestinationChanged 类似的东西:

navController.addNavigationChangeListener { motionLayout.transtionToAnotherState() }

类似于 TransitionManager 如果我想从 Scene A 转到 Scene B 我就这样做:

TransitionManager.beginDelayedTransition(rootLayout)
// Do someLayout changes

1) MotionLayout 是否可以做类似的事情? 2) 如果是,谁能指导我?

非常感谢。

没有 100% 相同的方法,但如果你知道你的原始状态和最终状态,你可以获得类似的结果。

setTransition(R.id.stateA, R.id.stateB);
setTransitionDuration(durationMs); // optional
transitionToEnd(); // here may be transitionToStart to goto state A from B

如果您不知道您当前的状态,您可以从 TransitionView 本身读取它:

getCurrentState();

但请注意,如果您正处于过渡期,它将 return -1

显然,这样做真的很容易,对于任何需要知道的人,只需拨打:

motionLayout.transitionToState(constraintSetId)