1

画面の左右へのスワイプを監視するアクティビティを作成しました。これが私が実装したコードです。

public class YourActivity extends Activity {
private GestureDetector gestureDetector;

@Override
public void onCreate(Bundle savedInstanceState) {
// ...

gestureDetector = new GestureDetector(
                  new SwipeGestureDetector());
}

/* ... */

@Override
public boolean onTouchEvent(MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
  return true;
}
return super.onTouchEvent(event);
}

private void onLeftSwipe() {

// Here I have used a toast to check whether it's detectecting my swipe to left.
// But it is not working.
}

private void onRightSwipe() {
// Here I have used a toast to check whether it's detectecting my swipe to right.
// But it is not working.
}

 // Private class for gestures
private class SwipeGestureDetector 
      extends SimpleOnGestureListener {
// Swipe properties, you can change it to make the swipe 
// longer or shorter and speed
private static final int SWIPE_MIN_DISTANCE = 120;
private static final int SWIPE_MAX_OFF_PATH = 200;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
                     float velocityX, float velocityY) {
  try {
    float diffAbs = Math.abs(e1.getY() - e2.getY());
    float diff = e1.getX() - e2.getX();

    if (diffAbs > SWIPE_MAX_OFF_PATH)
      return false;

    // Left swipe
    if (diff > SWIPE_MIN_DISTANCE
    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
       YourActivity.this.onLeftSwipe();

    // Right swipe
    } else if (-diff > SWIPE_MIN_DISTANCE
    && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
      YourActivity.this.onRightSwipe();
    }
  } catch (Exception e) {
    Log.e("YourActivity", "Error on gestures");
  }
  return false;
}
}
}

このコードを実行すると、左または右にスワイプしても何も起こりません。onRightSwipe()onLeftSwipeでのトーストはまったく機能しませんでした。コードのどこかが間違っている場合、誰かが私を修正できますか。ご協力いただきありがとうございます..

編集:: 上記のコードは、アクティビティ レイアウト xml ページにテキストビューがない場合に正常に機能します。しかし、いくつかのテキストビューがあり、実行時に値を設定しようとすると、アプリが強制終了し、エラーが java.lang.nullpointerexception として表示されます。私はここで何をしましたか??

4

1 に答える 1

0

Touch イベントをジェスチャ検出器に委譲してみてください。たとえば、次のようにします。

@Override
public boolean onTouchEvent(MotionEvent event) {

    // delegate the touch event to your gestureDetector 
    gestureDetector.onTouchEvent(event);
    return false;

}
于 2014-03-18T07:38:56.233 に答える