2016-05-24 85 views
0

我有一個帶有GridView的Android應用程序。手勢檢測器conflit onFling vs onSingleTapUp

在那個網格中,我需要檢測很多事件,並且我必須使用一個GestureDetector,但是有時當我點擊一個網格項時觸發事件onFling而不是onSingleTapUp

我在做什麼錯了?

class GestureDetectorGrid extends SimpleOnGestureListener 
{ 
     /** 
     * Sliding from right to the left to move to another grid 
     */ 
     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, 
           float velocityX,float velocityY) 
     { 
      //my code 
      return false;  
     } 

     /** 
     * Go to another Activity by clicking on a element from the grid. 
     */ 
     @Override 
     public boolean onSingleTapUp(MotionEvent e) 
     { 
      //my code 
      return true; 
     } 

     @Override 
     public void onLongPress(MotionEvent e) 
     { 
      //my code 
      super.onLongPress(e); 
     } 

     @Override 
     public boolean onScroll(MotionEvent e1, MotionEvent e2, 
           float distanceX, float distanceY) 
     { 
      //my code 
      return true; 
     } 

     @Override 
     public void onShowPress(MotionEvent e) 
     { 
      super.onShowPress(e); 
     } 

     @Override 
     public boolean onDown(MotionEvent e) 
     { 
      //my code 
      return true; 
     } 
} 

我的問題是重複的不同,因爲我想知道爲什麼在Android GestureDetector假設onFling代替onSingleTapUp。或者如果我做錯了什麼。

+1

[關於網格佈局拖動手勢檢測](的可能的複製http://stackoverflow.com/questions/937313/fling-gesture-detection-on-grid -佈局) –

回答

0

我解決這樣問題:

@Override 
public boolean onFling(MotionEvent e1, MotionEvent e2, 
         float velocityX,float velocityY) { 

    int posIni = pointToPosition((int) e1.getX(), (int) e1.getY()); 

    int posFin = pointToPosition((int) e2.getX(), (int) e2.getY()); 

    if(posIni == posFin) { 
     //onClick code 
    } 
    else { 
     //onFling code. 
    } 
    return true;  
}