创建视差滚动效果

视差滚动是一种技术,其中背景内容和前景内容以不同的速度滚动。您可以实现此技术来增强应用的 UI,在用户滚动时创建更动态的体验。

版本兼容性

此实现要求您的项目 minSDK 设置为 API 级别 21 或更高。

依赖项

创建视差效果

要实现视差效果,您可以将滚动组合项的滚动值的几分之一应用于需要视差效果的组合项。以下代码段采用两个嵌套的可视元素(图像和文本块),并以不同的速度沿相同方向滚动它们。

@Composable
fun ParallaxEffect() {
    fun Modifier.parallaxLayoutModifier(scrollState: ScrollState, rate: Int) =
        layout { measurable, constraints ->
            val placeable = measurable.measure(constraints)
            val height = if (rate > 0) scrollState.value / rate else scrollState.value
            layout(placeable.width, placeable.height) {
                placeable.place(0, height)
            }
        }

    val scrollState = rememberScrollState()
    Column(
        modifier = Modifier
            .fillMaxWidth()
            .verticalScroll(scrollState),
    ) {

        Image(
            painterResource(id = R.drawable.cupcake),
            contentDescription = "Android logo",
            contentScale = ContentScale.Fit,
            // Reduce scrolling rate by half.
            modifier = Modifier.parallaxLayoutModifier(scrollState, 2)
        )

        Text(
            text = stringResource(R.string.detail_placeholder),
            modifier = Modifier
                .background(Color.White)
                .padding(horizontal = 8.dp),

        )
    }
}

关于代码的关键点

  • 创建一个自定义的 layout 修饰符,以调整组合项滚动的速率。
  • Image 的滚动速度比 Text 慢,当两个组合项以不同的速率垂直平移时,会产生视差效果。

结果

图 1. 带有视差效果的滚动列表。

包含本指南的收藏夹

本指南是这些精选的快速指南收藏夹的一部分,涵盖更广泛的 Android 开发目标。

列表和网格允许您的应用以用户易于理解的直观形式显示集合。
了解使用明亮、引人注目的视觉效果使您的 Android 应用外观精美的方法。
文本是任何 UI 的核心部分。了解在应用中呈现文本的不同方法,以提供令人愉悦的用户体验。

有问题或反馈?

访问我们的常见问题页面,了解快速指南,或与我们联系,告诉我们您的想法。