简体   繁体   English

在Android中实现双击按钮

[英]Implement double click for button in Android

How can I implement double click for a button in Android?如何在Android中实现双击按钮? Should I use OnDoubleTapListener?我应该使用 OnDoubleTapListener 吗?

int i = 0;
btn.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        i++;
        Handler handler = new Handler();
        Runnable r = new Runnable() {

            @Override
            public void run() {
                i = 0;
            }
        };

        if (i == 1) {
            //Single click
            handler.postDelayed(r, 250);
        } else if (i == 2) {
            //Double click
            i = 0;
            ShowDailog();
        }


    }
});
private long lastTouchTime = 0;
private long currentTouchTime = 0;

.. ..

         @Override
                public void onClick(View view) {

                    lastTouchTime = currentTouchTime;
                    currentTouchTime = System.currentTimeMillis();

                    if (currentTouchTime - lastTouchTime < 250) {
                        Log.d("Duble","Click");
                        lastTouchTime = 0;
                        currentTouchTime = 0;
                    }

                }

This is probably a good place to start:这可能是一个很好的起点:

Android: How to detect double-tap? Android:如何检测双击?

I recommend switching to a more native way like long press (answer to linked question) or something more creative (using multi-touch), unless you are bent on the Windows default double-click way of doing things?我建议切换到更原生的方式,如长按(链接问题的答案)或更具创意的方式(使用多点触控),除非您倾向于使用 Windows 默认的双击方式做事?

You may have a valid reason though - double clicking is after all faster than long press.你可能有正当理由虽然-双击毕竟不是长按快。

I wrote this for popping up a Toast message on a double click in a mapping application:我写这个是为了在地图应用程序中双击弹出 Toast 消息:

private long lastTouchTime = -1;

@Override
public boolean onTouchEvent(MotionEvent e, MapView mapView) {

   GeoPoint p = null;

   if (e.getAction() == MotionEvent.ACTION_DOWN) {

      long thisTime = System.currentTimeMillis();
      if (thisTime - lastTouchTime < 250) {

         // Double click
         p = mapView.getProjection().fromPixels((int) e.getX(), (int) e.getY());
         lastTouchTime = -1;

      } else {
         // too slow
         lastTouchTime = thisTime;
      }
   }
   if (p != null) {
      showClickedLocation(p);// Raise a Toast
   }
   return false;
}

This is a good site for performing double click... I used it and worked.这是一个执行双击的好网站...我使用它并工作。

http://mobile.tutsplus.com/tutorials/android/android-gesture/ http://mobile.tutsplus.com/tutorials/android/android-gesture/

I used it and worked:我使用它并工作:

public class DoubleClickTest extends Activity {
    String TAG = "DoubleOrSingleClickTest";
    private boolean waitDouble = true;
    private static final int DOUBLE_CLICK_TIME = 350; // double click timer

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.double_click_test);
        Button button = (Button) findViewById(R.id.buttonDoubleOrSingleClicked);
        button.setOnClickListener(listenerDoubleOrSingle);
    }

    View.OnClickListener listenerDoubleOrSingle = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (waitDouble == true) {
                waitDouble = false;
                Thread thread = new Thread() {
                    @Override
                    public void run() {
                        try {
                            sleep(DOUBLE_CLICK_TIME);
                            if (waitDouble == false) {
                                waitDouble = true;
                                singleClick();
                            }
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                };
                thread.start();
            } else {
                waitDouble = true;
                doubleClick();
            }
        }
    };
    // single event
    private void singleClick() {
        Log.i(TAG, "singleClick");
    }
    // double event
    private void doubleClick() {
        Log.i(TAG, "doubleClick");
    }
}

It comes from " https://elingwange.iteye.com/blog/1613177 "它来自“ https://elingwange.iteye.com/blog/1613177

Create your own DoubleTapListener创建您自己的 DoubleTapListener

You can create a DoubleTapListener by inheriting View.OnClickListener and adding a Callback of your listener.您可以通过继承View.OnClickListener并添加您的侦听器的回调来创建 DoubleTapListener。

MyDoubleClickListener.class MyDoubleClickListener.class

public class MyDoubleClickListener implements View.OnClickListener{

    private boolean isRunning= false;
    private int resetInTime =500;
    private int counter=0;

    private DoubleClickCallback listener;

    public DoubleTapListener(Context context)
    {
      listener = (DoubleClickCallback)context;             
    }

    @Override
    public void onClick(View v) {

       if(isRunning)
       {
          if(counter==1) //<-- makes sure that the callback is triggered on double click
          listener.onDoubleClick(v);
       }

       counter++;

       if(!isRunning)
       {
          isRunning=true;
          new Thread(new Runnable() {
              @Override
              public void run() {
                 try {
                    Thread.sleep(resetInTime);
                    isRunning = false;
                    counter=0;
                 } catch (InterruptedException e) {
                  e.printStackTrace();
                 }
              }
          }).start();
       }

    }

}

DoubleClickCallback.class DoubleClickCallback.class

public interface DoubleClickCallback {

   public void onDoubleClick(View v);

}

And you are done.你已经完成了。 You can use this Listener in any Activity.您可以在任何活动中使用此侦听器。

How do I use this DoubleClickListener in my Activity?我如何在我的活动中使用这个 DoubleClickListener?

Implement Callback in your activity and override the method.在您的活动中实现回调并覆盖该方法。

public class MainActivity extends AppCompatActivity implements MyDoubleClickListener{

    private Button button;       

    @Override
    protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);

         button   = (Button)findViewById(R.id.button);    
         button.setOnClickListener(new DoubleTapListener(this));  //<-- Set listener

    }

    @Override
    public void onDoubleClick(View v) {
          // Toast to show double click        
    }

}

Important point is using this concept you can create any kind of listener (Triple-click listener)重要的一点是使用这个概念你可以创建任何类型的监听器(三击监听器)

Relevant Links:相关链接:

See the full working code HERE此处查看完整的工作代码

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM