2012-03-31 20 views
14

Sto ascoltando gli eventi di clic lungo di una vista tramite setOnLongClickListener(). Posso modificare il ritardo/durata del clic lungo?Modifica ritardo lungo clic

risposta

13

AFAIK, n. È cablato nel framework tramite getLongPressTimeout() su ViewConfiguration.

Siete invitati a gestire i vostri eventi touch e definire il vostro concetto di "clic lungo". Assicurati che non sia troppo diverso da quello che l'utente si aspetta, e molto probabilmente l'utente si aspetterà quello che usano tutte le altre app, che è la durata standard di 500ms.

+2

Come definiresti il ​​tuo concetto di clic lungo? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

+0

Grazie, suppongo che continuerò con il default per ora. – fhucho

+0

@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz probabilmente sovrascrivendo Vista. Cool username BTW ;-) – fhucho

3

questa era la soluzione di lavoro più semplice che ho trovato per questa restrizione:

//Define these variables at the beginning of your Activity or Fragment: 
private long then; 
private int longClickDuration = 5000; //for long click to trigger after 5 seconds 

... 

//This can be a Button, TextView, LinearLayout, etc. if desired 
ImageView imageView = (ImageView) findViewById(R.id.desired_longclick_view); 
imageView.setOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_DOWN) { 
      then = (long) System.currentTimeMillis(); 
     } else if (event.getAction() == MotionEvent.ACTION_UP) { 
      if ((System.currentTimeMillis() - then) > longClickDuration) { 
      /* Implement long click behavior here */ 
      System.out.println("Long Click has happened!"); 
      return false; 
      } else { 
      /* Implement short click behavior here or do nothing */ 
      System.out.println("Short Click has happened..."); 
      return false; 
      } 
     } 
     return true; 
     } 
    }); 
11

Questo è il mio modo per la durata impostata a premere a lungo

private int longClickDuration = 3000; 
private boolean isLongPress = false; 

numEquipeCheat.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       isLongPress = true; 
       Handler handler = new Handler(); 
       handler.postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         if (isLongPress) { 
          Vibrator vibrator = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE); 
          vibrator.vibrate(100); 
          // set your code here 
          // Don't forgot to add <uses-permission android:name="android.permission.VIBRATE" /> to vibrate. 
         } 
        } 
       }, longClickDuration); 
      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       isLongPress = false; 
      } 
      return true; 
     } 
    }); 
2

Questo è quello che uso. È simile alla risposta di Cumulo Nimbus, con due differenze notevoli.

  1. Utilizzare i valori di evento già memorizzati per il tempo di inattività e l'ora corrente. Oltre a non duplicare gli sforzi, questo ha il piacevole effetto di rendere l'ascoltatore utilizzabile per più viste contemporaneamente senza tenere traccia degli orari di inizio di ogni singolo evento.
  2. Controllare view.isPressed per assicurarsi che l'utente non si sia allontanato dalla vista durante l'evento di tocco. Ciò simula il comportamento di sistema predefinito per onClick e onLongClick.

long longPressTimeout = 2000; 

@Override 
public boolean onTouch(View view, MotionEvent event) { 
    if (view.isPressed() && event.getAction() == MotionEvent.ACTION_UP) { 
     long eventDuration = event.getEventTime() - event.getDownTime(); 
     if (eventDuration > longPressTimeout) { 
      onLongClick(view); 
     } else { 
      onClick(view); 
     } 
    } 
    return false; 
} 

Se la vista non è normalmente cliccabile si sarà necessario chiamare view.setClickable(true) per il controllo view.isPressed() al lavoro.

Problemi correlati