效果

实现代码
@Composable
fun TopImage(scrollState: ScrollState) {
val move = ((-scrollState.value) * 0.3f).dp
val modifier = Modifier
.fillMaxWidth()
.height(150.dp)
.offset(y = move)
//滑动时,向上平移
Image(
painter = painterResource(id = R.drawable.ic_launcher_foreground),
contentDescription = null,
modifier = modifier
)
}
val scrollState = rememberScrollState()
val cardHeight = 150.dp.value.toInt()
val marginTop = when {
scrollState.value < 0 -> cardHeight
cardHeight - scrollState.value < 0 -> 0
else -> cardHeight - scrollState.value
}.dp
Box(Modifier.background(Color.Gray)){
TopImage(scrollState)
//滑动时,更新上边距
Column(
modifier = Modifier
.padding(top = marginTop)
.fillMaxSize()
.background(Color.White)
.verticalScroll(scrollState),
horizontalAlignment = Alignment.CenterHorizontally
) {
for (i in 0..20) {
Text("item $i", modifier = Modifier.height(50.dp))
}
}
}
相关