问题:我想模拟scroll-view的滚动效果,场景是手指拖动列表,在手指松开的时候我会计算松开时的速度,从而开始一段匀减速运动,正常拖动没问题,就是我滑动后松开,但是还有一种情况是我滑动松开时列表是静止的,此时不需要继续惯性滑动了,我如何判断松开时它是静止的?目前我计算松开时的速度是根据v= (2 * s)/t 得到这个公式是根绝加速度,位移公式推算出来的,最后可以看到末速度只跟位移和时间有关系了,可见,只要滑动了一段距离肯定会产生速度,那该如何判断是否该继续惯性滑动呢?
问题:我想模拟scroll-view的滚动效果,场景是手指拖动列表,在手指松开的时候我会计算松开时的速度,从而开始一段匀减速运动,正常拖动没问题,就是我滑动后松开,但是还有一种情况是我滑动松开时列表是静止的,此时不需要继续惯性滑动了,我如何判断松开时它是静止的?目前我计算松开时的速度是根据v= (2 * s)/t 得到这个公式是根绝加速度,位移公式推算出来的,最后可以看到末速度只跟位移和时间有关系了,可见,只要滑动了一段距离肯定会产生速度,那该如何判断是否该继续惯性滑动呢?
一般都是设置一个阻尼系数, 因为就算滑动的距离短, 也可能划得很快, 也是需要惯性的, 这个阻尼是滑动公式里面的一个衡量, 具体公式忘了可以看看物理书, 中心思想就是把滚动条当成现实中存在的物体一样计算.
阻尼就相当于模拟来摩擦力,想想物理,如果表面足够光滑,那么你手指松开的时候就会按照松手时候的速度做匀速运动,但是如果有摩擦力的话,会做减速运动,所以当你的出手速度比较小,外加阻尼系数,就会算出来一个速度为0,那么自然是静止了。阻尼系数决定了你松手之后的速度计算,越小越光滑表明停止的越慢
3 回答4.9k 阅读✓ 已解决
5 回答2k 阅读
3 回答1.5k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
检查end之前的若干次move,比如5次move,如果产生了位移,说明是flick(轻拂),如果没有位移,或位移在阈值内,就是stay.
实现就是,用一个缓冲数组,容量只有5,超过就丢掉头部,每次move就把坐标塞进去.
end时检查它的位移量,超过阈值就执行缓动动画,否则结束滚动.