2011-08-04 10 views
0

スワイプの機能を実装するためにアンドロイドプロジェクトをやっています。 これを行う方法。アンドロイドでスワイプ

オンフリン方式で試していますが、それは私にとってはうまくいきません。誰にでも正しい解決策があります。

マイonflingコードは

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
    if (mGesturesEnabled) { 
     try { 
      if (e2.getY() - e1.getY() > StudyOptions.sSwipeMinDistance && Math.abs(velocityY) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getX() - e2.getX()) < StudyOptions.sSwipeMaxOffPath && !mIsYScrolling) { 
       // down 
       executeCommand(mGestureSwipeDown); 
      } else if (e1.getY() - e2.getY() > StudyOptions.sSwipeMinDistance && Math.abs(velocityY) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getX() - e2.getX()) < StudyOptions.sSwipeMaxOffPath && !mIsYScrolling) { 
       // up 
       executeCommand(mGestureSwipeUp); 
      } else if (e2.getX() - e1.getX() > StudyOptions.sSwipeMinDistance && Math.abs(velocityX) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getY() - e2.getY()) < StudyOptions.sSwipeMaxOffPath && !mIsXScrolling && !mIsSelecting) { 
       // right 
       executeCommand(mGestureSwipeRight); 
      } else if (e1.getX() - e2.getX() > StudyOptions.sSwipeMinDistance && Math.abs(velocityX) > StudyOptions.sSwipeThresholdVelocity && Math.abs(e1.getY() - e2.getY()) < StudyOptions.sSwipeMaxOffPath && !mIsXScrolling && !mIsSelecting) { 
       // left 
       executeCommand(mGestureSwipeLeft); 
      } 

      mIsXScrolling = false; 
      mIsYScrolling = false; 
     } catch (Exception e) { 
      Log.e(AnkiDroidApp.TAG, "onFling Exception = " + e.getMessage()); 
     } 
    } 
    return false; 
} 
+0

次回はフォーマットボタンを使用してフォーマットしてください。私はあなたのためにそれを体系化しましたが、それはまだインデントのいくつかの調整が必要です。また、「うまくいかない」という意味を付け加えてください。これは何をするのですか、何をやろうとしているのですか(そして理由は何か)、あなたのログは何を言いますか。もう少し努力すれば、これに簡単に答えることができます – Nanne

答えて

5

OKです。他のトピックのRepost:

私は考えることができる最も簡単な作業者のバージョンです。 ImageViewだけでなく、どのコンポーネントにも実際に結びつけることができます。

public class MyActivity extends Activity {

private void onCreate() { 
    final ImageView imageView = (ImageView) findViewById(R.id.image_view); 
    imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(final View view, final MotionEvent event) { 
      gdt.onTouchEvent(event); 
      return true; 
     } 
    }); 
} 

private final GestureDetector gdt = new GestureDetector(new GestureListener()); 

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_THRESHOLD_VELOCITY = 200; 
private class GestureListener extends SimpleOnGestureListener { 
    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Right to left 
     } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Left to right 
     } 
     if(e1.getY() - e2.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Bottom to top 
     } else if (e2.getY() - e1.getY() > SWIPE_MIN_DISTANCE && Math.abs(velocityY) > SWIPE_THRESHOLD_VELOCITY) { 
      return true; // Top to bottom 
     } 
     return false; 
    } 
} 

}

それは水平だけでなく、キャプチャし、だけでなく、垂直(あなたがそれを必要としない場合は、単に垂直部分を削除)、および水平方向のスワイプは、あなたが見ることができるように優先順位を持っています。メソッドの復帰(私のコメントであるNAD)はちょうどあなたのメソッドを呼び出すかの場所で 何でも:)

1

あなたはタッチ入力を使用する場合には、それはまた

に渡していないことを示すためにtrueを返す必要がありますsetOnTouchListenerを持っているか、あなたのontouchlistenerを使用していないことを確認してください。

関連する問題