7

フリングを検出するための通常のジェスチャ検出器があります , これは a のインスタンス属性ですSurfaceView

GestureDetector flingDetector = new GestureDetector(getContext(),new SimpleOnGestureListener() {

        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                    // Fling implementation
            return true;
        }
});

で複雑なものをたくさん描いてcanvasおり、translate(dx,dy) で使用するメソッドがありonScrollます。

translateだから私の質問は、メソッドを使用してフリングを実装するにはどうすればよいですか?

fling の検出には多くの質問があるようですが、私の質問はそれを実装することです。

4

1 に答える 1

5

これであなたの質問に答えられるかどうかわかりませんが、試してみます。

MotionEvent については、 http: //developer.android.com/reference/android/view/MotionEvent.html を確認してください。

onFling メソッドで e1 と e2 として受け取った 2 つのイベントを使用し、e1.getX()、e2.getX()、e1.getY()、e2.getY() で座標差を計算できます。 translate(dx,dy) で使用する dx と dy があります。

フリングはより動的なジェスチャに見えるので、フリングはより大きな動きを意味すると判断し、dx と dy に増幅係数を適用して、ユーザーがスクロールすると正確な動きが得られるようにしますが、フリングでは実際の動きは増幅されます。

この要因が速度に依存する場合、すべてのユーザー入力に対してカスタム応答があります。

(別のことは、結果をアニメーション化することです。これは、他のものに依存すると思います)。

それが私だったら私が試すかもしれない例:

  • ユーザーが静かにスクロールする: 動きは dx,dy です。(dx,dy) を翻訳します。
  • ユーザー フリング:
    実際のモーション: dx=(e2.getX()-e1.getX(). dy = (e2.getY()-e1.getY(). フリング ファクター: (カスタム実装). 変更されたモーション: dxModified = dx *velocityX*F. dyModified = dy*velocityY*F. 最後に: translate (dxModified,dyModified)

    これがある程度役立つことを願っています。

    編集:この質問が2012年のものだとは知りませんでした。うまくいけば、これは誰かの助けになるでしょう。とにかく、最終的な実装について知っておくとよいでしょう!.

于 2014-05-18T16:16:28.723 に答える