You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 23:45:39