36

I want to detect a doubletap on a view, like for example a button, and then know which view it was. I have seen this similar question but the question they say it is a duplicate of it does not seem to answer my question.

All I can find is to add a GestureDetector to the activity, and add a OnDoubleTapListener to it. But that is only triggered if I tap on the background/layout of my screen. It is not triggered when I (double)tap a button.

This is the code I have inside my 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;  
        }  
    });  
Community
  • 1
  • 1
Niels
  • 1,340
  • 2
  • 15
  • 32

1 Answers1

26

You can achieve this by just using these few lines of code. It's that simple.

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

Put this piece of code on the activity or adapter where you want to set the double tap action on your view.

starball
  • 20,030
  • 7
  • 43
  • 238
Imtiaz Abir
  • 731
  • 7
  • 12