SuperAPI AI 工具集

edit-a-shape-as-a-shape

编程与开发

查看项目

更新于 10-17 16:16

技能介绍

该页面给出一套 Jetpack Compose 中编辑曲线型设置的实现要点。核心主张是:控件应体现值的形状,当值是曲线时就画可拖拽曲线而不是一排滑块;控件应放在设置列表中,因为用户通常边听边调,每次跳转屏幕都会被往返两次。

主要能力:

  • 用 draft(可变状态)暂存拖动中的曲线,shown 取 draft ?: bands,使线条跟手而不写入存储。
  • 手势使用原始 awaitEachGesture 指针循环,而非 detectDragGestures,因为后者会吃掉点击和拖动起始的一小段,而在图上按下本身就是编辑。
  • 每次手势结束时调用一次 commit(working),避免每个指针事件都写存储并重建音频图。
  • 用 rememberUpdatedState 捕获处理里读取的每个值(含回调),避免 pointerInput 只安装一次导致闭包持有旧值、拖动后覆盖已保存曲线。
  • 用 LaunchedEffect(bands) { draft = null } 在存储值到达后清空草稿,而非在释放时清空,避免曲线回弹。
  • pointerInput 只以点数 count 为键,不以值为键,防止拖动中每帧重建手势。
  • 每次更新生成新列表而非原地修改,便于绘制并规整长度。
  • 平滑时按相邻点方向取控制点(Catmull-Rom 转三次贝塞尔),并将控制点 y 钳制在本段两端之间,避免过冲偏离用户放置的句柄。
  • 刻度与标签放在画布旁的独立槽位,槽宽提为常量;读数在 Kotlin 中拼装数字与单位。
  • 曲线、微调滑块和重置按钮放在同一容器中,读作一个控件。

验证方式:用 grep 检查提交路径恰好一处、rememberUpdatedState 数量;并按顺序做行为测试:单点轻触不改不移动也应改变值;整图拖动只写一次存储;存储值未加载时立即拖动不应被占位值覆盖;相邻两点差距大时渲染路径不得越出两点之间。

限制:资料为 Kotlin/Compose 语境下的实现技巧,依赖 Android 与 Compose 环境;分类上属于编程与开发。其余平台、收费等信息暂未提供。