2011-08-08 13 views
3

ユーザーがいつアクティビティで左右のスイングをしたかを検出しようとしています。 現在、私はOnGestureListenerとメソッドonFling()を使用しています。私の問題は、それを検出するうまい方法を達成していないことです。は、Android(onFlingとOnGestureListener)の左右のスイングを検出します

他のアプリケーションや「ネイティブ」Androidスイング検出と同様の動作が欲しいですが、コードには(以下に追加されます)間違ったスイング検出が多数あります。誰かがすでに私は

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) { 
    //Get Position 
    float ev1X = e1.getX(); 
    float ev2X = e2.getX(); 

    //Get distance of X (e1) to X (e2) 
    final float xdistance = Math.abs(ev1X - ev2X); 
    //Get velocity of cursor 
    final float xvelocity = Math.abs(velocityX); 

    if((xvelocity > SWIPE_MIN_VELOCITY) && (xdistance > SWIPE_MIN_DISTANCE)) 
    { 
     if(ev1X > ev2X)//Switch Left 
     { 
      if (Manager.debug) Log.d(Manager.appname,"SWING_LEFT_EVENT"); 
      moveToRight(); 
     } 
     else//Switch Right 
     { 
      if (Manager.debug) Log.d(Manager.appname,"SWING_RIGHT_EVENT"); 
      moveToLeft(); 
     } 
    } 

    return false; 
} 
+0

最新のビデオ:https://www.youtube.com/watch?v=woR2nCOuRu4 – Donato

答えて

7

を使用しています)=コードザッツ

を先端部を希望することを解決している場合は、私は、これは便利ですどこまでわかりませんが、これは、私はそれを行う方法です。

private static final int SWIPE_MIN_DISTANCE = 120; 
private static final int SWIPE_MAX_OFF_PATH = 250; 
private static final int SWIPE_THRESHOLD_VELOCITY = 100; 
@Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
      float velocityY) { 
     Log.d("---onFling---", e1.toString() + e2.toString() + ""); 

     try { 
      if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) 
       return false; 
      // right to left swipe 
      if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE 
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //do your code 

      } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE 
        && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) { 
       //left to right flip 
       } 
      } 
     } catch (Exception e) { 
      // nothing 
     } 
     return false; 
    } 
関連する問題