欢迎光临散文网 会员登陆 & 注册

Jetpack Compose 实现临时用的滚轮选择器 (WheelPicker)

2022-12-20 19:49 作者:-l0_0l-  | 我要投稿

目录

在使用过 MIUI 13 闹钟中时间的滚动选择后,感觉 Jetpack 自带的「TimePickerDialog」使用起来也不是很顺手, 于是想找一下有没相关的实现。不过,列表选择器倒有,可循环的滚轮选择器貌似没见着。无奈之下,只能自己尝试 弄一个出来。虽然只懂一些 Jetpack 皮毛,但也就自己用,效率什么的不需要考虑。

最终,弄出来的也的确只能凑合着用,远不到项目可用的地步。

1. 实现「环形数组」(circular array)

略过,主要就 取余

2. 检测手指滑动

  • Modifier.draggable : 获取偏移

  • Modifier.offset : 控件位置偏移

3. 显示

  • Modifier.clipScrollableContainer(Orientation.Vertical) : 超出 Layout 范围的裁剪掉

使用 Layout 控制子控件位置(实际显示会隐藏掉两个),以及获取子控件大小

到这一步,可以算得上是可用了,就差动画和惯性滑动。

4. 动画(实现过程不推荐)

由于采用 环形数组 的原因,想要每帧判断一下是否需要更新数组。不过没找到相关的用例, 只好在 Jetpack Recomposition 的时候更新数组。

  • Animatable.snapTo : 滑动中直接设置偏移

  • Animatable.animateTo : 惯性滑动

5. 代码

5.1. 环形数组


5.2. 滚轮选择器


Jetpack Compose 实现临时用的滚轮选择器 (WheelPicker)的评论 (共 条)

分享到微博请遵守国家法律