私は、翻訳用のマトリックスによって制御されるAndroidでOpenGL ES Viewを持っています。私は、GoogleマップのアプリやiPhoneに見られるような勢いのスクロールのヒントを得る方法を見つけようとしています。ありがとう。スムーススクロール/慣性スクロール/モーメンタムスクロール
9
A
答えて
11
問題が2Dである場合、それは非常に簡単です
- あなたは経過時間を取得する必要があり、各フレームで
あなたonTouch関数はあなたの指の加速を見つけるでしょう。私は距離から加速を得る方法についての式を忘れていました。これは、時間変数を持つ位置の二次導関数でなければなりません。しかし、デルタX、デルタYを常に加速に変換する必要があります。簡単にするには、そこに正確なものを置く必要はありません。編集:私はそれを見ていない理由は分かっていませんが、機能はすべてそこにありました...
アクセラレータx = 2(newposition.x - 位置x - 速度x * elapsedTime)/(elapsedTime * elapsedTime);
アクセラレーションを取得したら、そのコードで新しい位置を設定できます。これは2dの単純な物理力学です。あなたの加速であなたのスピードを見つけることができ、スピードで次のポジションを見つけることができます。
speed.x = (float) (mass * acceleration.x * elapsed + speed.x); speed.y = (float) (mass * acceleration.y * elapsed + speed.y); position.x += mass * acceleration.x/2 * elapsed * elapsed + speed.x * elapsed; position.y += mass * acceleration.y/2 * elapsed * elapsed + speed.y * elapsed; speed.x *= friction; speed.y *= friction;
質量と摩擦があなたはそれがどのようになる速く定義できますし、それ自体が遅くなりますどのくらいの速。あなたはおそらくコードを微調整しなければならないでしょう。なぜなら、このダイナミックは、スローダウンするために後方にスクロールしなければならない場合にはうまくいきません。
各フレームの最後に、アクセラレーションを(0,0)にリセットする必要があります。タッチした後の新しいフレームごとに、アクセラレーションを何かに設定する必要があります。それは非常にうまくいくはずです:)
1
- ビューがスクロールしている速度を測定します。
- ユーザーがスクロールを停止したときに検出します。
- スクロールビューがスクロールしている速度を徐々に減少させます。
このような何か:
public void redraw() {
myScrollView.ySpeed = myScrollView.lastY-myScrollView.y;
myScrollView.xSpeed = myScrollView.lastX-myScrollView.x;
if (!userIsScrolling && ySpeed > 0) {
ySpeed--;
}
if (!userIsScrolling && xSpeed > 0) {
xSpeed--;
}
myScrollView.lastY = myScrollView.y;
myScrollView.y += ySpeed;
myScrollView.lastX = myScrollView.x;
myScrollView.x += xSpeed;
}
public void userStoppedScrolling() {
userIsScrolling = false;
}
関連する問題
- 1. Emacs、スムーススクロール、スクロールマージン、エシェル
- 2. Android WebViewのスムーススクロール
- 3. JavaScriptスムーススクロール - iphone
- 4. モバイルサファリの慣性スクロールのイベント
- 5. iOS慣性でオブジェクトをドラッグ
- 6. jQueryスムーススクロール現在/アクティブ
- 7. 水平スムーススクロールとスムーススクロールの両方を実装する方法
- 8. javacriptでtouchmoveの慣性をシミュレートする
- 9. CollapsingToolbarLayoutスムーススクロールの問題を伴うAndroid RecyclerView
- 10. 複数形の剛体の慣性を計算する
- 11. Androidのスクロールに抵抗/慣性/不感帯を追加する
- 12. Javaでの慣性航法信号処理
- 13. 依存性注入と他のコンストラクタパラメータ - 悪い習慣?
- 14. 特定の慣性でパスをたどるアルゴリズム
- 15. TkinterとPythonを使ったMac OS Xでの慣性スクロール
- 16. モバイルSafari:慣性スクロールと最低限のUI動作?
- 17. 慣用Javascriptを
- 18. フォームの検証エラーの後、ページの先頭にスムーススクロール
- 19. オーバーフローを隠してDIV内の位置にJQueryスムーススクロール
- 20. iOSのiframeでスムーススクロール効果が機能しない
- 21. 良いコーディング慣行
- 22. Scalaの慣用テーブルセルレンダラー
- 23. Rails - アクションメーラの慣習
- 24. 慣性双方向パイプ損失のない下流の状態のパイプ
- 25. スイフト:パニング(ドラッグ)後にスムーズな慣性を作成する方法は?
- 26. Sklearn Birchクラスターの「慣性」を得ることはできますか?
- 27. ルビー/ Railsの:alias_method慣行
- 28. clojureで慣用的なファイルロック?
- 29. JQuery - 不慣れな表記
- 30. 安全なC++コーディング慣行
あなたの答えを見ていて、あなたのスピードフォーミュラが加速を必要とするときに、あなたが加速のスピードをどのように得るのか疑問に思っています。 – Dan
速度を直接計算するのではなく、加速度を使用する方が良い結果をもたらす場合があります。最初のスピードとアクセラレーションは0です。したがって、次のフレームにスピードを追加するためにスピードをどこかで保存する必要があります。加速は、各フレーム間の変化以外は何もありません。加速はデルタX、デルタYとすることができる。実際の速度はdeltaX * elapsedTime + lastSpeedになります。このようにして、フレームが時間がかかっても時間がかかっても、速度は正しく計算されます。 他のパラメータは、物理的なビットを偽って不活性と摩擦を付加します。あなたは本当にそれが永遠にスクロールすることを望んでいません。 –