前段时间我开始为我的目的编写某种列表视图,昨天我因为滚动行为发生了一些奇怪的事情而感到沮丧。我已经阅读了默认android.widget.Scroller
类实现的源代码,并注意到事情比看起来更简单。有运动学定律就像石头一样。不幸的是,当我决定在投掷时在某个点增加减速时,我注意到当前速度并不总是正确计算。在查看了 Scroller 源代码后,我意识到当前速度的计算总是不正确的。有一种隐藏方法可以计算滚动条的当前速度:
/**
* @hide
* Returns the current velocity.
*
* @return The original velocity less the deceleration. Result may be
* negative.
*/
public float getCurrVelocity() {
return mVelocity - mDeceleration * timePassed() / 2000.0f;
}
正如你所看到的Vfinal = Vsource - a * t / 2
……但是除以 2 是为了什么???由于我已将其更改为物理上正确的方法
public float getCurrVelocity() {
return mVelocity - mDeceleration * timePassed() / 1000.0f;
}
我的弹簧效果很好。
所以问题是为什么要除以2?或者这只是一个错误,因为这个方法是隐藏的并且没有在 Scroller 类中本地调用?