2012-11-23 11 views
27

Chcę wykryć doubletap w widoku, na przykład jako button, a następnie wiedzieć, który widok był. Widziałem this similar question, ale pytanie, które mówią, że jest duplikatem, nie wydaje się odpowiadać na moje pytanie.Jak słuchać dubletu na ekranie w Androidzie?

Wszystko, co mogę find, to dodać do aktywności GestureDetector i dodać do niej OnDoubleTapListener. Ale to jest wyzwalane tylko wtedy, gdy dotknę tła/układu mojego ekranu. To jest nie wyzwalane, gdy I (podwójne) dotknie button.

Jest to kod mam w moim onCreate:

gd = new GestureDetector(this, this); 


    gd.setOnDoubleTapListener(new OnDoubleTapListener() 
    { 
     @Override 
     public boolean onDoubleTap(MotionEvent e) 
     { 
      Log.d("OnDoubleTapListener", "onDoubleTap"); 
      return false; 
     } 

     @Override 
     public boolean onDoubleTapEvent(MotionEvent e) 
     { 
      Log.d("OnDoubleTapListener", "onDoubleTapEvent"); 
      //if the second tap hadn't been released and it's being moved 
      if(e.getAction() == MotionEvent.ACTION_MOVE) 
      { 

      } 
      else if(e.getAction() == MotionEvent.ACTION_UP)//user released the screen 
      { 

      } 
      return false; 
     } 

     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) 
     { 
      Log.d("OnDoubleTapListener", "onSingleTapConfirmed"); 
      return false; 
     } 
    }); 
+0

Idealny kod na tej metodzie obsługi na jednym kliknięciu lub podwójnym dotknięciu :) –

Odpowiedz

7

Można to osiągnąć tylko przy użyciu tych kilka linijek kodów. To takie proste.

final GestureDetector gd = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener(){ 


     //here is the method for double tap 


     @Override 
     public boolean onDoubleTap(MotionEvent e) { 

      //your action here for double tap e.g. 
      //Log.d("OnDoubleTapListener", "onDoubleTap"); 

      return true; 
     } 

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

     } 

     @Override 
     public boolean onDoubleTapEvent(MotionEvent e) { 
      return true; 
     } 

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


    }); 

//here yourView is the View on which you want to set the double tap action 

yourView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 

      return gd.onTouchEvent(event); 
     } 
    }); 

Umieść ten fragment kodu w działaniu lub adapterze, w którym chcesz ustawić akcję podwójnego kliknięcia w widoku.

Pozdrawiam!

Powiązane problemy