2014-02-18 6 views
0

Я пытаюсь сделать простую 2D-игру, используя Opengl es 2. Я использую GLSurfaceView. Я пытаюсь обнаружить бросок на взгляде, но он ничего не обнаруживает. Почему это? Ниже приведен код: -GLSurfaceView не обнаруживает жесты android

Пробовал объявить детектор жестов внутри и снаружи glsurfaceview.

@SuppressWarnings("deprecation") 
    final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 
     public void onLongPress(MotionEvent e) { 
      Log.d("", "Longpress detected"); 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, 
       float velocityX, float velocityY) { 
      Log.d("", "OnFling detected"); 
      return super.onFling(e1, e2, velocityX, velocityY); 
     } 


    }); 

Внутри GLSurfaceView

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

Когда я Fling на поверхности, он обнаруживает длительное нажатие и выводит сообщение отладки для долгого нажатия, а не махом. Что бы я ни делал на экране, он просто обнаруживает longpress .. что не так?

+0

Как вы используете «onTouchEvent» - в моем классе, который расширяет класс «GLSurfaceView.Renderer», я могу только переопределить «onTouch» ... – Antinous

ответ

1

Включите это переопределение onDown в прослушивателе:

@Override 
public boolean onDown(MotionEvent event) { 
    return true; 
} 

От documentation:

Это потому, что все жесты начинаются с сообщением onDown(). Если вы вернете false из onDown(), как GestureDetector.SimpleOnGestureListener по умолчанию, система предполагает, что вы хотите игнорировать остальные жесты, а другие методы GestureDetector.OnGestureListener никогда не вызываются. Это имеет потенциал, чтобы вызвать неожиданные проблемы в вашем приложении.»

Я понимаю, что это не объясняет, почему вы до сих пор удается получить обнаружения longpress. Если выше решает проблему, возможно, это головоломка, не нуждается в решении ...