Jetpack Compose折叠布局中lerp函数调用报错求助
问题解决:Jetpack Compose中lerp参数不匹配报错
错误原因
你调用lerp(imageMaxSize, imageMinSize, collapseFraction)时,imageMaxSize和imageMinSize是Int类型(通过roundToPx()转换得到),但Jetpack Compose官方提供的lerp函数没有针对两个Int数值的重载,仅支持Dp、DpOffset、IntOffset等Compose专用类型,因此触发参数不匹配报错。
解决方案
不需要额外添加依赖,两种方法任选其一:
方法1:自定义Int类型的lerp函数
直接实现一个处理Int值的lerp逻辑,放在你的Composable代码中即可:
// 自定义Int版本的lerp函数 private fun lerp(start: Int, stop: Int, fraction: Float): Int { return start + ((stop - start) * fraction).roundToInt() }
之后直接调用这个函数替代原来的lerp,参数完全匹配。
方法2:在Dp层面完成lerp再转Px
调整尺寸计算逻辑,先对Dp值做lerp,再转换为Px并约束尺寸:
// 先对Dp做lerp,再转Px并约束最大/最小值 val imageWidth = lerp(ExpandedImageSize, CollapsedImageSize, collapseFraction) .roundToPx() .let { size -> max(min(size, constraints.maxWidth), constraints.minWidth) }
额外注意点
你的代码中collapseRange的计算存在逻辑错误:
val collapseRange = with(LocalDensity.current) { (MaxTitleOffset - MaxTitleOffset).toPx() }
MaxTitleOffset - MaxTitleOffset结果为0,会导致后续scrollProvider() / collapseRange出现除以0的异常,需要修正为正确的范围计算,比如:
val collapseRange = with(LocalDensity.current) { (MaxTitleOffset - MinTitleOffset).toPx() }
内容的提问来源于stack exchange,提问作者Shiva s
相关产品推荐
相关产品推荐

