2016-05-24 2 views
0

У меня есть приложение для Android с GridView.GestureDetector 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

Возможный дубликат [Fling обнаружения жест на макете сетки] (http://stackoverflow.com/questions/937313/fling-gesture-detection-on-grid -layout) –

ответ

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;  
} 
Смежные вопросы