1

simpleGestureDetector を使用して TextView でフリングを検出しようとしています:

public void onCreate(Bundle savedInstanceState) {

    ...

    textContent.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent ev) {
                return gestureDetector.onTouchEvent(ev);
        }        
    });
}

class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

            if(foo) {
                fooBar();
                return true;
            }
        return super.onFling(e1, e2, velocityX, velocityY);
    }
} 

これは、条件が満たされた場合にコードfooBar()が実行されるという意味で機能しfooますが、問題は、条件が満たされない場合に super.onFling() を返すとフリングがキャンセルされることです。フリングで指を離した後、スクロールが継続しなくなりました。XML は次のとおりです。

<RelativeLayout
    android:id="@+id/main_area"
    android:layout_height="match_parent"
    android:layout_width="match_parent">
    <TextView
        android:id="@+id/main_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp"
        android:textSize="16dp"
        android:lineSpacingExtra="2dip"
    />
</RelativeLayout>

通常のスクロール動作を維持しながらフリングを検出する方法はありますか?

編集: 申し訳ありませんが、これはジェスチャ検出器とは何の関係もありませんでした。TextView を ScrollView から取り出したからです。何らかの理由で、TextView には ScrollView のようなスムーズな (慣性) スクロールがないようです。

4

2 に答える 2

2

スクロール イベントとフリング イベントの違いは、ユーザーが動きの最後に指を離してフリングにすることです。(そして速度はより高速です)。

したがって、どちらのイベントが実行されているかを (終了する前に) 検出するには (あまりにも) 似ているため、両方のイベントを組み合わせることはできないと思います。また、ユーザーの観点からは、両方のジェスチャを同時に使用することは混乱を招きます (似ているため)。

したがって、答えは次のとおりです。いいえ、通常のスクロール動作を維持しながらフリングを検出する方法はありません。

(少なくとも私は過去に試してみましたが、両方のイベントを適切な方法で使用することに成功しませんでした)

于 2012-10-15T11:45:14.207 に答える
0

これがあなたの問題になるかどうかはわかりませんが、条件が満たされているのになぜ戻ってくるtrueのですか? イベントを消費したくない場合は、false(またはsuper.onFling) を返す必要があります。それが戻り値の目的です。

于 2012-10-15T11:41:50.790 に答える