2011-01-31 2 views

risposta

4

questo è probabilmente un buon punto di partenza:

Android: How to detect double-tap?

vi consiglio di passare a un modo più nativa come premere a lungo (risposta alla domanda linked) o qualcosa di più creativo (con multi-touch), a meno che tu non sia piegato sul modo di fare doppio clic predefinito di Windows?

È possibile che ci sia un valido motivo per cui - fare doppio clic su è dopo tutto più veloce della pressione prolungata.

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

Questo non tiene conto di eventuali vincoli temporali [] (http://stackoverflow.com/a/15353499/636571). – an00b

+0

@ an00b controlla la risposta aggiornata con limiti di tempo –

+0

Ah, capito. +1. – an00b

3

Ho scritto questo per spuntare un messaggio Toast su un doppio clic in un'applicazione di mapping:

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

       }