如何在安卓系统中监听视图的双击事件?

36

我想检测一个视图(例如button)上的doubletap,然后知道是哪个视图。我看到了这个相似的问题,但他们说它是重复的问题并不能回答我的问题。

我能找到的只是将GestureDetector添加到活动中,并在其中添加OnDoubleTapListener。但是只有当我点击屏幕的背景/布局时,才会触发它。当我(双击)点击一个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;  
        }  
    });  

这个方法处理单击或双击非常完美 :) - Najib.Nj
1个回答

26

您只需要使用这几行代码就可以实现。如此简单。

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

将此代码片段放在您想要在视图上设置双击操作的活动或适配器中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接