代码之家  ›  专栏  ›  技术社区  ›  zmt

为什么我不能在喷气背包作曲中使用Modifier.sharedBounds

  •  0
  • zmt  · 技术社区  · 11 月前

    我跟着 official tutorial 尝试在我的项目中添加动画。但当我复制并粘贴代码时 Modifier.sharedBounds(rememberSharedContentState(key = "bounds")... 到我的安卓工作室,我得到了一个 Unresolved reference: sharedBounds 错误。

    我在项目中添加了动画依赖项(版本1.7.0-rc01),以下是我的所有依赖项

    dependencies {
    
        implementation(libs.androidx.core.ktx)
        implementation(libs.androidx.lifecycle.runtime.ktx)
        implementation(libs.androidx.activity.compose)
        implementation(platform(libs.androidx.compose.bom))
        implementation(libs.androidx.ui)
        implementation(libs.androidx.ui.graphics)
        implementation(libs.androidx.ui.tooling.preview)
        implementation(libs.androidx.material3)
        implementation(libs.androidx.navigation.runtime.ktx)
        implementation(libs.androidx.navigation.compose)
        testImplementation(libs.junit)
        androidTestImplementation(libs.androidx.junit)
        androidTestImplementation(libs.androidx.espresso.core)
        androidTestImplementation(platform(libs.androidx.compose.bom))
        androidTestImplementation(libs.androidx.ui.test.junit4)
        debugImplementation(libs.androidx.ui.tooling)
        debugImplementation(libs.androidx.ui.test.manifest)
        implementation(libs.vico.compose.m3)
        implementation(libs.vico.views)
        implementation(libs.kotlinx.coroutines.android)
        implementation(libs.androidx.animation)
    }
    

    我想知道我是否缺少了一些必要的依赖关系

    1 回复  |  直到 11 月前
        1
  •  0
  •   Thracian    11 月前

    这是一个作用域的修饰符 SharedTransitionScope ,您只能在其中定义的作用域内调用作用域修饰符。您需要使用

    SharedTransitionLayout SharedTransitionScope 可堆肥物

    SharedTransitionLayout {
        val sharedTransitionState = rememberSharedContentState("")
    
        AnimatedContent(
            targetState = visible
        ) { target ->
    
            Modifier.sharedBounds(
                sharedContentState = sharedTransitionState,
                animatedVisibilityScope = this@AnimatedContent
            )
        }
    }
    
    SharedTransitionScope {
        AnimatedVisibility(
            visible = visible
        ) {
    
            val sharedTransitionState = rememberSharedContentState("")
    
            Modifier.sharedBounds(
                sharedContentState = sharedTransitionState,
                animatedVisibilityScope = this@AnimatedVisibility
            )
        }
    }
    

    或直接通过 TransitionScope 如,在TransitionScope修饰符下方的示例中。

    @Composable
    private fun MainContent(
        onShowDetails: () -> Unit,
        modifier: Modifier = Modifier,
        sharedTransitionScope: SharedTransitionScope,
        animatedVisibilityScope: AnimatedVisibilityScope
    ) {
        with(sharedTransitionScope) {
            Row(
                modifier = Modifier
                    .padding(8.dp)
                    .sharedBounds(
                        rememberSharedContentState(key = "bounds"),
                        animatedVisibilityScope = animatedVisibilityScope,
                        enter = fadeIn(),
                        exit = fadeOut(),
                        resizeMode = SharedTransitionScope.ResizeMode.ScaleToBounds()
                    )
                    // ...
            ) {
                // ...
            }
        }
    }
    

    https://developer.android.com/develop/ui/compose/animation/shared-elements

    推荐文章