讲一下几个系统手势的问题
比如这个时候有一个竖向的列表,我们手指在上面滚动就可以视为拖拽。当手指离开之后,列表因为惯性,我们要触发一个过度滚动效果
但如果这个竖向列表同时存在于一个横向的 Pager 中。当我们这个过度滚动效果的时间比较长,而用户这个时候又想左右滑动来切换页面
这个操作在安卓原生 View和 Compose 里面都有问题,安卓会始终拦截这个手势,使得它继续触发竖向的滚动,因为它这地方没有分开处理的。而且更糟糕的是,当用户横向拖拽时,它会继续触发竖向的滚动;快速的横向切换会导致一直在竖向滚动,会造成一个很不好的体验。这个向谷歌反馈很多次了,但是反正到现在也没解决
苹果 iOS 它其实也是会拦截第一次的横向滚动,但是它的横向滚动会让竖向的列表停止掉,那么用户他第二次的横向滚动就可触发页面的切换
因为我主要用小米啊,小米这个地方就处理得很好,它的横向是直接可以切换的
以及在列表的滚动设计中,用户的手势到底要做成什么的效果,也是要根据场景来确定的。在单纯的竖向列表滚动中,触发过度滚动时用户轻点,其实并不是想立刻触发某一项的点击,而只是想让这个列表停下来,在各大系统上几乎都这样设计的。但到了页面的切换比如后台多任务堆叠的卡片,用户这个时候只是想快速地切换,他们就需要“指哪打哪”。那么这个时候,单纯的点击并不是要让堆叠动画立刻停在那个地方让用户选择卡片,用户其实更想的就是直接去选择那个卡片,完成一个极快的操作。这些都是需要考虑的
我在 Salt UI 里面 Copy 了部分的compose foundation 来完成这个改善,但是也不是个长久的办法,这个工作量比较大,而且每次 Merge 上游都很麻烦
(语音转文字)
44August 12, 2026 5K 1 3