Supponiamo di avere un TextView
che visualizza un numero come 0 e si dispone di un Button
. Ora se l'utente preme il pulsante il numero nel TextView aumenterà per uno (questo so come fare) ma se l'utente preme il pulsante e non lo rilascia, allora il numero nel TextView
deve essere aumentato e questo dovrebbe ripeti fino a quando l'utente non rilascia lo Button
. In altre parole: come aumentare il numero più e più volte finché l'utente tiene premuto il pulsante?Ripetere un'azione tenendo premuto il pulsante lungo
risposta
Un approccio generale (non specifico per Android) sarebbe quello di rilevare la stampa e rilasciare l'evento separatamente. L'evento stampa avvia un'attività periodica (Runnable
o Thread
) che si aggiunge al contatore (diciamo 5 volte al secondo o una volta ogni 200 ms). L'evento di rilascio interrompe l'attività periodica.
- Impostare una
View.OnLongClickListener
per il pulsante - Lascia la tua attività un
Runnable
, e inizializzare (ma non avviarlo) quando si carica l'attività - Avere l'OnLongClickListener fare il suo normale compito asincrona di aggiornamento la casella di testo e il controllo dell'ora da quando è stato premuto per la prima volta
- Creare uno
OnTouchListener
che interrompe loRunnable
quando l'evento di tocco viene completato.
So che è un progetto di massima, ma questo è un modello molto utile per essere in grado di riutilizzare e modificare, quindi vale la pena affondare i tuoi artigli in esso ...
Avrai bisogno di fissare un evento di ripetizione asincrona quando si riceve un evento mousePressed
e lo si interrompe quando si riceve un evento mouseReleased
.
Ci sono molti modi per gestirlo in Java. Mi piace usare le classi java.util.concurrent
, che sono abbastanza flessibili. Ci sono alcune cose da tenere a mente:
Se i tuoi eventi asincroni non si verificano sul thread di invio eventi, devi impostare il testo JButton
usando SwingUtilities.invokeLater()
.
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Frame
{
public static void main(String[] args)
{
JFrame frame = new JFrame();
final JButton button = new JButton("0");
final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
button.addMouseListener(new MouseAdapter()
{
int counter = 0;
ScheduledFuture<?> future;
@Override
public void mousePressed(MouseEvent e)
{
Runnable runnable = new Runnable()
{
public void run()
{
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
button.setText(String.valueOf(counter++));
}
});
}
};
future = executor.scheduleAtFixedRate(runnable, 0, 200, TimeUnit.MILLISECONDS);
}
@Override
public void mouseReleased(MouseEvent e)
{
if (future != null)
{
future.cancel(true);
}
}
});
frame.add(button);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
- 1. Pulsante premuto a lungo
- 2. azione di ripetizione Android premendo e tenendo premuto un pulsante
- 3. Spostare la finestra tenendo premuto Qml MouseArea
- 4. AS3 Esegui continuamente il codice tenendo premuto un pulsante - Air per iOS/Android
- 5. Tenendo premuto il tasto sinistro del mouse in AutoHotkey
- 6. Selettore per il pulsante premuto
- 7. UIButton premere e tenere premuto - ripetere l'azione fino al rilascio
- 8. premuto il pulsante di Android stato
- 9. Il tasto 'Ctrl' è premuto?
- 10. Pulsante jQuery mobile rimanendo premuto
- 11. Qual è il trucco dietro "lanciare l'applicazione tenendo premuto [tasto modificatore]"?
- 12. Come personalizzare l'intervallo di tempo del pulsante lungo/ritardo premuto in android
- 13. Come avviare il thread se il pulsante è premuto e interromperlo se viene premuto di nuovo?
- 14. Android per rilevare quando si tiene premuto un pulsante
- 15. cambia colore pulsante testo quando premuto
- 16. Pulsante di stile diverso applicato quando premuto
- 17. Come sapere quale pulsante è stato premuto?
- 18. Come evidenziare un pulsante quando viene premuto?
- 19. Come identificare se ho premuto il pulsante Indietro in IE?
- 20. C# Verifica se il pulsante è stato premuto
- 21. Come disabilitare il pulsante Indietro premuto nella classe frammento Android
- 22. Rileva quando viene premuto il pulsante Home iOS
- 23. setResult non funziona quando il pulsante BACK è premuto
- 24. Leggere un carattere senza richiedere il pulsante Invio premuto
- 25. Pulsante "done" premuto pulsante evento per UIWebView e WKWebView
- 26. Come ripetere gli elementi di un array lungo due assi?
- 27. NSTextField continua a ripetere il titolo
- 28. iOS UITableViewCell deve tenere premuto a lungo per selezionare l'articolo
- 29. Mostra menu contestuale quando il collegamento viene premuto a lungo in TextView
- 30. Android - È possibile disabilitare il clic lungo del pulsante home per evitare il task manager?
+1 Questo suona come il processo specifico di Android che stavo descrivendo in modo più generico. –