2011-01-31 18 views

Odpowiedz

4

Prawdopodobnie jest to dobre miejsce, aby rozpocząć:

Android: How to detect double-tap?

polecam przejście na bardziej natywny sposób jak długie naciśnięcie (odpowiedź na połączonego pytanie) lub coś bardziej twórczego (za pomocą multi-touch), chyba że jesteś skłonny do domyślnego, dwukanałowego sposobu działania Windowsa?

Być może masz jednak ważny powód - dwukrotne kliknięcie jest po wszystkim szybszym niż długie naciśnięcie.

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


    } 
}); 
+2

nie biorą pod uwagę wszelkie [ograniczenia czasowe] (http://stackoverflow.com/a/15353499/636571). – an00b

+0

@ an00b sprawdź zaktualizowaną odpowiedź z ograniczeniami czasowymi –

+0

Ah, rozumiem. +1. – an00b

3

Napisałem to dla pojawiały się wiadomości toast na podwójne kliknięcie w aplikacji mapowania:

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

       } 
Powiązane problemy