This repository was archived by the owner on Dec 27, 2024. It is now read-only.
This repository was archived by the owner on Dec 27, 2024. It is now read-only.
MotionLayout is crashing #526
Open
Description
The motion layout is crashing with this error.
java.lang.IllegalArgumentException: Failed requirement.
at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure(MeasureAndLayoutDelegate.kt:177)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:228)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$remeasureAndRelayoutIfNeeded(MeasureAndLayoutDelegate.kt:38)
at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:201)
at androidx.compose.ui.platform.AndroidComposeView.measureAndLayout(AndroidComposeView.android.kt:662)
at androidx.compose.ui.node.Owner$DefaultImpls.measureAndLayout$default(Owner.kt:182)
at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:846)
at android.view.View.draw(View.java:22648)
at android.view.View.updateDisplayListIfDirty(View.java:21520)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21476)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21476)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21476)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4512)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4485)
at android.view.View.updateDisplayListIfDirty(View.java:21476)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:534)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:540)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:616)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:4438)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4166)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3326)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2143)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8665)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1037)
at android.view.Choreographer.doCallbacks(Choreographer.java:845)
at android.view.Choreographer.doFrame(Choreographer.java:780)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1022)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
this is my code
var sectionsState: Boolean by rememberSaveable { mutableStateOf(false) }
val collapsedSet = getCollapsedConstraints()
val expandedSet = getExpandedConstraints()
val progress by animateFloatAsState(
targetValue = if (sectionsState) 1f else 0f,
animationSpec = tween(150)
)
MotionLayout(
start = collapsedSet,
end = expandedSet,
progress = progress,
modifier = Modifier.fillMaxSize(),
) {
...
}
private fun getCollapsedConstraints(): ConstraintSet = ConstraintSet {
val title = createRefFor("title")
val subtitle = createRefFor("subtitle")
val toggle = createRefFor("toggle")
val sections = createRefFor("sections")
val timers = createRefFor("timers")
constrain(title) {
width = Dimension.wrapContent
height = Dimension.wrapContent
end.linkTo(parent.end)
start.linkTo(parent.start)
top.linkTo(parent.top)
}
constrain(subtitle) {
width = Dimension.wrapContent
height = Dimension.wrapContent
end.linkTo(parent.end)
start.linkTo(parent.start)
top.linkTo(title.bottom)
}
constrain(sections) {
width = Dimension.matchParent
height = Dimension.wrapContent
start.linkTo(parent.start)
end.linkTo(parent.end)
bottom.linkTo(parent.top)
}
constrain(toggle) {
end.linkTo(parent.end)
top.linkTo(sections.bottom)
}
constrain(timers) {
width = Dimension.wrapContent
height = Dimension.wrapContent
start.linkTo(parent.start)
end.linkTo(parent.end)
bottom.linkTo(parent.bottom)
}
}
private fun getExpandedConstraints(): ConstraintSet = ConstraintSet {
val title = createRefFor("title")
val subtitle = createRefFor("subtitle")
val toggle = createRefFor("toggle")
val sections = createRefFor("sections")
val timers = createRefFor("timers")
constrain(title) {
width = Dimension.wrapContent
height = Dimension.wrapContent
end.linkTo(parent.end)
start.linkTo(parent.start)
top.linkTo(parent.top)
}
constrain(subtitle) {
width = Dimension.wrapContent
height = Dimension.wrapContent
end.linkTo(parent.end)
start.linkTo(parent.start)
top.linkTo(title.bottom)
}
constrain(sections) {
width = Dimension.matchParent
height = Dimension.wrapContent
start.linkTo(parent.start)
end.linkTo(parent.end)
top.linkTo(parent.top)
}
constrain(toggle) {
end.linkTo(parent.end)
top.linkTo(sections.bottom)
}
constrain(timers) {
width = Dimension.wrapContent
height = Dimension.wrapContent
start.linkTo(parent.start)
end.linkTo(parent.end)
bottom.linkTo(parent.bottom)
}
}