Выполнить двойной щелчок на кнопке в Android

Как я могу реализовать двойной щелчок для кнопки в Android? Должен ли я использовать OnDoubleTapListener?

5 ответов


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


    }
});

Это, вероятно, хорошее место для начала:

Android: Как обнаружить двойное нажатие?

Я рекомендую перейти на более родной способ, как длительное нажатие (ответ на связанный вопрос) или что-то более творческое (с помощью мультитач), если вы не склонны к Windows по умолчанию дважды щелкните способ делать вещи?

У вас может быть веская причина, хотя - двойным нажатием is в конце концов быстрее, чем длительное нажатие.


Я написал это для всплывающего сообщения тоста двойным щелчком мыши в приложении отображения:

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

Это хороший сайт для выполнения двойного щелчка... Я использовал его и работал.

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


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

                }