创建视差滚动效果

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

结果

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

版本兼容性

此实现要求将项目的 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 慢,因此当这两个可组合项以不同的速率垂直平移时,会产生视差效果。

包含本指南的合集

本指南属于以下精选的快速指南合集,这些合集涵盖了更广泛的 Android 开发目标:

借助列表和网格,您的应用可以以赏心悦目的形式显示集合,方便用户浏览。
了解如何使用明亮动人的视觉元素,让您的 Android 应用拥有精美的外观和风格。
文字对任何界面都属于核心内容。了解如何在应用中以不同方式呈现文字,从而提供愉悦的用户体验。

有问题或反馈

前往我们的常见问题解答页面,了解有关快速指南的信息;或者联系我们并告知您的想法。