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;
}

私のSping効果はうまくいきます。

問題は、なぜ 2 による除算があるのか​​ということです。それとも、このメソッドは非表示になっており、Scroller クラス内でローカルに呼び出されていないため、単なる間違いですか?

4

1 に答える 1

0

Scroller クラスにも何か問題があると思いますが、コードをあなたほど詳しく評価していません。

代わりに、新しい android.widget.OverScroller クラスを試すことをお勧めします。さまざまな速度をより適切に処理するようです。API レベル 9 で追加されたジンジャーブレッドです。

于 2012-11-14T20:14:44.673 に答える