Sto ascoltando gli eventi di clic lungo di una vista tramite setOnLongClickListener(). Posso modificare il ritardo/durata del clic lungo?Modifica ritardo lungo clic
14
A
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.
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.
- 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.
- 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 peronClick
eonLongClick
.
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
- 1. Sul lungo clic Elimina elemento
- 2. Set clic lungo listener per ListView
- 3. mappe android: Come fare un clic lungo su una mappa?
- 4. Modifica visibilità widget al clic
- 5. Modifica in singolo clic in WPF DataGrid
- 6. Vim: modifica comportamento clic del mouse
- 7. Modifica stato componente sul pulsante clic
- 8. Highcharts - modifica impilamento colonna al clic
- 9. Mostra menu contestuale con un clic breve non lungo Click
- 10. Android: clic lungo sulle viste secondarie di ExpandableListView?
- 11. android - rimozione di elementi da ListView su clic lungo
- 12. ContextMenu non appare a lungo. Fare clic su
- 13. espresso lungo clic sulla voce di menu e menu popup
- 14. come implementare un listener di clic lungo su un listview
- 15. Maniglia sull'elemento clic lungo sulla vista del riciclatore
- 16. Ritardo di avvio lungo per l'applicazione Java WebStart da Java 1.7.0u40
- 17. Aggiorna attività corrente senza ritardo
- 18. Quanto è lungo il ritardo tra Control.Invoke() e la chiamata del suo delegato?
- 19. Ritardo molto lungo durante l'esecuzione del test dell'unità C# in VS2015
- 20. Android: il metodo doInBackground di Asynctask viene chiamato dopo un lungo ritardo
- 21. Come personalizzare l'intervallo di tempo del pulsante lungo/ritardo premuto in android
- 22. put_connections() al grafico di Facebook in Koala fallisce dopo un lungo ritardo
- 23. In Celery, come posso impedire a task a lungo ritardo di bloccare quelli più recenti?
- 24. Ritardo del titolo SVG
- 25. cambiamento Jquery con ritardo
- 26. Ritardo dello stato evidenziato del pulsante
- 27. Ritardo casuale
- 28. AudioQueueDispose ritardo
- 29. Pygame - Ritardo suono
- 30. Modifica lo stato CheckBox sulla voce Elenco fai clic?
Come definiresti il tuo concetto di clic lungo? – zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
Grazie, suppongo che continuerò con il default per ora. – fhucho
@zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz probabilmente sovrascrivendo Vista. Cool username BTW ;-) – fhucho