3

アプリでフリングジェスチャを検出する際に問題が発生しました。私のレイアウトは、GridView、いくつかのTextViewとボタンで構成されています。

OnGestureListenerを実装しました:

public class MyActivity extends Activity implements OnGestureListener{
private GestureDetector myGesture ;

次にOnCreateで:

myGesture = new GestureDetector(this);

およびオーバーライドされたメソッド:

@Override
public boolean onTouchEvent(MotionEvent event){
    return myGesture.onTouchEvent(event);
}

}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    try {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;
        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //right to left fling
        }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //left to right fling
        }
    } catch (Exception e) {
        // nothing
    }
    return false;
}

そして、これは実際にはうまく機能しますが、GridViewでは機能しません。GridViewの外でフリングを実行する場合は、どこでも機能します。GridViewでは-反応はまったくありません。文字通り何をしたらいいのかわからないので、よろしくお願いします。

4

3 に答える 3

2

イベントが消費されたときにonFlingでtrueを返しますか(以下のように)?

    @Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    // TODO Auto-generated method stub
    try {
        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
            return false;
        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //right to left fling
        }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
            //left to right fling
        }
        return true;
    } catch (Exception e) {
        // nothing
    }
    return false;
}
于 2012-02-28T19:06:22.510 に答える
1

私は実際に別の解決策を見つけました。なぜなら、私がそれをやろうとした方法は単にうまくいかず、誰もその理由を知らないからです。代わりにGestureOverlayViewを使用しましたが、うまく機能します。ジェスチャライブラリに2つのスワイプジェスチャを追加する必要がありました。

于 2012-03-04T22:18:47.807 に答える
1

Afaik a gridviewは、ScrollView機能も自動的に追加し、ジェスチャ検出をインターセプトします。その動作をオーバーライドし、フリング検出を追加する独自のGridViewを実装する必要があります。stackoverflowやその他のサイトでのScrollViewの例は多数あります。GridViewに対して同様のアプローチを実行します。

于 2012-02-28T19:06:15.613 に答える