モバイル アプリケーションに実装できる一般的なスムーズ スクロール メカニズムを取得しようとしています。
任意のプラットフォームに移植できるように十分に汎用的であることを望んでいますが、現在、.net Compact Framework で C# を使用しています。
私が今していることは次のとおりです。
- (パネルの ctor に) Stopwatch オブジェクトを作成します。
- マウスダウンでストップウォッチを開始し、現在のマウスポイントを保存します
_lastMouse
- マウスの移動時に、ストップウォッチを停止して保存し
velocity = (_lastMouse - curMouse) / Stopwatch.TotalSeconds
、ストップウォッチをリセットして再度開始します- ほとんどの場合
Stopwatch.TotalSeconds
、0.02 から 0.03 の間です
- ほとんどの場合
- マウスを離すと、
velocity
値をスムーズ スクロール関数に渡します。その関数は、端に到達するか、摩擦の増加によって速度が == 0 になるまで、パネルをスクロールし続けます。
私の問題は最終段階にあります。値は通常、velocity
2,000 ~ 3,000 ピクセルの範囲内です。速度は 1 秒あたりのピクセル単位であるため、これは予想されることです。ストップウォッチ (まだ実行されているはずです) を取り、それを停止し、最後のマウスの動きからの経過時間を見つけて を掛けvelocity
、Stopwatch.TotalSeconds
その距離を取得し、ストップウォッチをリセットして開始し、ループバックして最初からやり直します。
予想される結果は、更新間の経過時間に速度を掛けた値が、スクロールする必要がある (最後のマウスの動きに応じた) ピクセル数になることです。私の実際の結果は、時々パネルが飛んだり、時には辛うじて動いたりすることです! 緩やかな減速は問題ありません。オフになっているのは最初の速度だけです
ロジックに欠陥はありますか?私は何か他のことをすべきですか?
助けてくれてありがとう!