2012-11-23 10 views
27

たとえば、buttonのようなビュー上でdoubletapを検出して、それがどのビューであったかを知りたいとします。私はthis similar questionを見ましたが、彼らはそれが重複していると言う質問は私の質問に答えていないようです。アンドロイドのビューでダブルタップを聴くには?

私はfindをアクティビティに追加し、GestureDetectorを追加し、OnDoubleTapListenerを追加します。しかし、それは私が画面の背景/レイアウトをタップする場合にのみトリガされます。 I(ダブル)をタップしたときににならない場合は、buttonをタップします。

これは私が私の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

このメソッドのパーフェクトコードは、シングルタップまたはダブルタップで処理します:) –

答えて

7

あなただけのコードのこれらのいくつかの行を使用することによって、これを達成することができます。それは簡単です。

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); 
     } 
    }); 

ビュー上でダブルタップ操作を設定するアクティビティまたはアダプタにこのコードを挿入します。

乾杯!

関連する問題