Compose实现带固定按钮的CollapsingToolbar的需求与问题
在Jetpack Compose中实现自定义CollapsingToolbar
我尝试在Compose中实现CollapsingToolbar,但网上找到的示例都无法满足需求。此前我使用XML实现的布局结构如下:
- AppBarLayout - CollapsingToolbarLayout - ConstraintLayout - ImageView(带视差效果、centerCrop) - Toolbar - NestedScrollView - FloatingButton (anchorGravity="bottom|end") - Button(吸底固定)
我进行了多种尝试,但核心难点在于添加FloatingButton(也可以是其他普通视图,非特指FAB)。
我已实现视差效果,代码如下:
Box( modifier = Modifier.graphicsLayer { translationY = -scroll.value.toFloat() / 2f alpha = (-1f / headerHeightPx) * scroll.value + 1 } ) { Image(...) }
我找到了一个Compose Collapsing Toolbar第三方库,但尽量不想使用第三方依赖。我了解到Material3中有TopAppBar,原本以为可以适用。
更新
我也尝试了Material3的TopAppBar,但未达到预期效果,因为我的需求逻辑与它的默认行为冲突。
我的思路是创建一个Box或带阴影的Surface,在其中包含Icon、Image和中间的Box,我还绘制了示意图来描述该思路。需要将列表的滚动状态与Image的透明度动画或视差效果关联,当Toolbar折叠后,为Surface添加阴影。
总结需求
- 创建自定义Composable,模拟TopAppBar的折叠行为,当高度达到TopAppBar最小高度56.dp时停止折叠;
- 滚动时Image执行透明度或视差动画,背景平滑过渡为白色;
- 需要实现类似
exitUntilCollapsed的逻辑,比如当列表第一项可见时自动展开Toolbar。
内容的提问来源于stack exchange,提问作者StuartDTO
相关产品推荐
相关产品推荐

