android.view.GestureDetector.OnGestureListenerのonFling()とonScroll()のイベントの違いは何ですか? リンクテキスト
4 に答える
onScroll()は、ユーザーが画面上に指を置き、指を持ち上げずに画面上でスライドさせた後に発生します。onFling()は、ユーザーがスクロールしてから指を離した場合に発生します。フリングは、モーションが十分に速かった場合にのみトリガーされます。
実際、onFlingは、動きが発生した速度とは何の関係もありません。速度(またはMotionEventパラメーターを介した距離)が目的に十分であったかどうかを判断するのは、velocityXおよびvelocityYパラメーターを介したユーザーです。
onScrollは、ユーザーが指を動かしているときに常に呼び出されますが、onFlingは、ユーザーが指を離した後にのみ呼び出されます。
メソッドframework/base/core/java/android/view/GestureDetector.java
で、のコードを確認できます。およびまたはの場合に呼び出されます。の場合に呼び出されます。onTouchEvent()
onFling()
MotionEvent.ACTION_UP
velocityY > mMinimumFlingVelocity
velocityX > mMinimumFlingVelocity
onScroll()
MotionEvent.ACTION_MOVE
onFling()が発生した後、2つを区別できます。まず、onDown()で、画像の現在の座標をクラス変数として保存します。onScroll()は期待どおりに機能しますが、onFling()がこれがフリングイベントであると判断した場合は、onDown()に保存されていた元の座標を復元するだけです。これは非常にうまく機能することがわかりました。
@Override
public boolean onDown(MotionEvent e) {
// remember current coordinates in case this turns out to be a fling
mdX = imageView.dX;
mdY = imageView.dY;
return false;
}