BoxWithConstraints 可以提供给子组件父节点传递的约束
BoxWithConstraints(
modifier = Modifier.fillMaxWidth()
) {
// todo 在这里可以拿到 constraints 就是父节点传递的约束
val anim = remember {
Animatable(0f)
}
// 简单实现的大图移动
LaunchedEffect(key1 = Unit, block = {
anim.animateTo(1f, animationSpec = infiniteRepeatable(tween(5000), repeatMode = RepeatMode.Reverse))
})
val context = LocalContext.current
val image = remember {
ImageBitmap.imageResource(context.resources,R.mipmap.big_anim_bg)
}
val totalOffset = if(image.height - constraints.maxHeight > 0) image.height - constraints.maxHeight else 0
val srcWidth = if(constraints.maxWidth > image.width) image.width else constraints.maxWidth
val srcHeight = if(constraints.maxHeight > image.height) image.height else constraints.maxHeight
Image(painter = BitmapPainter(image = image,
srcSize = IntSize(srcWidth,srcHeight),
srcOffset = IntOffset(0, (totalOffset * anim.value).toInt())
),
contentDescription = "",
contentScale = ContentScale.FillBounds,
modifier = Modifier.fillMaxWidth()
)
}