我正在尝试实现 LazyVerticalGrid 和 Column 可组合项之间的共享元素转换
SceneHost(modifier = Modifier.fillMaxSize()) {
if (isTransformed.value) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
movableItems(selectedIndex.value) {
}
}
} else {
LazyVerticalGrid(
columns = GridCells.Fixed(4),
state = state
//modifier = Modifier.fillMaxSize()
) {
items(
key = { colors[it].value.toString() },
count = colors.size,
itemContent = { index ->
movableItems(index) {
}
})
}
}
}
SceneHost 是 LookaheadScope 的包装器,它是从 LookaheadScope 示例中克隆的
这是网格的样子
具有扩展尺寸的元素不会转换并抛出
java.lang.IllegalStateException: Check failed.
at androidx.compose.ui.focus.FocusInvalidationManager$invalidateNodes$1.invoke(FocusInvalidationManager.kt:145)
at androidx.compose.ui.focus.FocusInvalidationManager$invalidateNodes$1.invoke(FocusInvalidationManager.kt:62)
at androidx.compose.ui.platform.AndroidComposeView.onEndApplyChanges(AndroidComposeView.android.kt:693)
at androidx.compose.ui.node.UiApplier.onEndChanges(UiApplier.android.kt:48)
at androidx.compose.runtime.CompositionImpl.applyChangesInLocked(Composition.kt:818)
at androidx.compose.runtime.CompositionImpl.applyLateChanges(Composition.kt:856)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:607)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$2.invoke(Recomposer.kt:510)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:947)
at android.view.Choreographer.doCallbacks(Choreographer.java:761)
at android.view.Choreographer.doFrame(Choreographer.java:693)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Suppressed: kotlinx.coroutines.DiagnosticCoroutineContextException: [androidx.compose.runtime.PausableMonotonicFrameClock@9032efb, androidx.compose.ui.platform.MotionDurationScaleImpl@fcdab18, StandaloneCoroutine{Cancelling}@1435971, AndroidUiDispatcher@d53b356]
这里是过渡
并且元素没有从它们的坐标开始转换