0

前段时间我开始为我的目的编写某种列表视图,昨天我因为滚动行为发生了一些奇怪的事情而感到沮丧。我已经阅读了默认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 类中本地调用?

4

1 回答 1

0

我认为 Scroller 类也有问题,但我没有像你那样仔细评估代码。

我建议改用新的 android.widget.OverScroller 类。它似乎可以更正确地处理各种速度。它是在 API 级别 9 中添加的,即姜饼。

于 2012-11-14T20:14:44.673 回答