Voglio implementare un'azione ripetuta premendo e tenendo premuto un pulsante. Esempio: quando l'utente fa clic su un pulsante e lo tiene premuto, dovrebbe chiamare ancora e ancora un metodo simile su un intervallo fisso finché l'utente non rimuove il dito dal pulsante.azione di ripetizione Android premendo e tenendo premuto un pulsante
risposta
Esistono diversi modi per eseguire questa operazione, ma uno piuttosto semplice sarebbe postare un Runnable
su un Handler
con un certo ritardo. Nella sua forma più elementare, si avrà un aspetto un po 'come questo:
Button button = (Button) findViewById(R.id.button);
button.setOnTouchListener(new View.OnTouchListener() {
private Handler mHandler;
@Override public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mHandler != null) return true;
mHandler = new Handler();
mHandler.postDelayed(mAction, 500);
break;
case MotionEvent.ACTION_UP:
if (mHandler == null) return true;
mHandler.removeCallbacks(mAction);
mHandler = null;
break;
}
return false;
}
Runnable mAction = new Runnable() {
@Override public void run() {
System.out.println("Performing action...");
mHandler.postDelayed(this, 500);
}
};
});
L'idea è piuttosto semplice: inviare un Runnable
contenente l'azione ripetuta su un Handler
quando si verifica l'azione tocco 'down'. Dopodiché, non postare di nuovo il codice Runnable
fino a quando non viene superata l'azione di tocco "su". Lo Runnable
continuerà a postare se stesso su Handler
(mentre l'azione tattile 'in basso' sta ancora accadendo), fino a quando non viene rimosso dall'azione di ritocco - questo è ciò che abilita l'aspetto 'ripetuto'.
A seconda del comportamento effettivo del pulsante e del suo onclick/onuch che si sta cercando, è possibile eseguire il post iniziale senza ritardo.
se voglio fare qualcosa in più quando l'utente tiene premuto il pulsante per diciamo 5 secondi, come posso riconoscere che l'utente trattiene il pulsante per 5 secondi. –
Si potrebbe semplicemente spingere un altro 'Runnable 'in ritardo al' Handler'. Se dovrebbe essere un evento one-off, semplicemente non pubblicarlo di nuovo dal 'Runnable' stesso. Inoltre, non dimenticare di rimuoverlo nell'azione 'su', nel caso in cui il pulsante venga rilasciato prima che siano passati quei 5 secondi. –
Giù il voto mentre gli ascensori al di fuori dell'area del pulsante continueranno a sparare al conduttore. ACTION_CANCEL è richiesto come minimo su ACTION_UP. Sfortunatamente se il pulsante si trova in una scrollview o in un altro widget scorrevole questo codice può far sembrare che il widget toccato sia ancora trattenuto anche se potrebbe essere fuori dallo schermo o lontano dal dito dell'utente. –
È possibile registrare uno View.OnKeyListener
per quella vista. Tieni presente che è meglio rimbalzare tali callback, altrimenti, nel caso in cui il tuo metodo esegua qualcosa di leggermente "pesante", l'interfaccia utente non sarà liscia.
Anche se non è una grande idea. Potrebbe essere eseguito avviando un timer su onKeyDown
per sparare a un intervallo durante il quale si sposta il cursore di un passo e si riavvia il timer. È quindi possibile annullare il timer sull'evento onKeyUp
. Il modo in cui questo funziona su altri sistemi è in genere quello di spostare il primo tasto verso il basso quindi attendere un po 'per garantire che l'utente stia trattenendo definitivamente il pulsante ... quindi la ripetizione può essere un po' più veloce. Pensa a una ripetizione automatica della tastiera. Questo dovrebbe funzionare e non dovrebbe influire negativamente sul thread dell'interfaccia utente.
Perché dici che non è una grande idea? – Suragch
- 1. Ripetere un'azione tenendo premuto il pulsante lungo
- 2. Azione di ripetizione JavaScript quando il mouse viene tenuto premuto
- 3. Spostare la finestra tenendo premuto Qml MouseArea
- 4. AS3 Esegui continuamente il codice tenendo premuto un pulsante - Air per iOS/Android
- 5. Android per rilevare quando si tiene premuto un pulsante
- 6. Qt tasti di ripetizione automatica premendo e rilasciando
- 7. Android premendo il pulsante Indietro dovrebbe uscire dall'app
- 8. premuto il pulsante di Android stato
- 9. Snackbar nasconde l'azione fluttuante premendo il pulsante di azione su di esso
- 10. pulsante CSS premendo effetto
- 11. Forma diversa AZIONE a seconda del pulsante premuto
- 12. Differenza tra azione Pulsante Indietro e pulsante Indietro Android
- 13. ANDROID: come inserire un ritardo dopo aver premuto un pulsante?
- 14. Azione pulsante separata e azione successiva
- 15. Programmazione premendo un pulsante UITabBar in Xcode
- 16. Animazione del pulsante di azione mobile Android
- 17. Pulsante di azione fluttuante e sfondo bianco
- 18. Forza ricarica/aggiornamento premendo il pulsante Indietro
- 19. Finestra di dialogo AppCompat Alert Pulsante di azione sfondo Premuto stato
- 20. Come evidenziare un pulsante quando viene premuto?
- 21. Pulsante premuto a lungo
- 22. Tenendo premuto il tasto sinistro del mouse in AutoHotkey
- 23. Pulsante di stile diverso applicato quando premuto
- 24. Floating pulsante di azione e l'errore
- 25. Android Floating Azione Pulsante API 19 (KitKat)
- 26. Android: registrazione pulsante e azione sulla base della selezione radio
- 27. Android - Pulsante con rotazione/rotazione dell'immagine di "caricamento" quando premuto
- 28. Creare il layout con CardView e Floating Pulsante Azione Android
- 29. Pulsante "done" premuto pulsante evento per UIWebView e WKWebView
- 30. UIButton con azione di mantenimento e azione di rilascio
Ma è la necessità della mia applicazione. Voglio spostare il cursore costantemente mentre l'utente tiene premuto il pulsante. Funziona bene per ogni tocco. Voglio solo ripetere l'azione mentre l'utente tiene premuto il pulsante. –
@JoxTraex: per favore specifica il tuo punto di vista in una risposta e vedi quanti voti positivi ottiene. –