Załóżmy, że masz TextView
, który wyświetla liczbę jak 0 i masz Button
. Teraz, jeśli użytkownik naciśnie przycisk, liczba w TextView zwiększy się o jeden (wiem, jak to zrobić), ale jeśli użytkownik naciśnie przycisk i nie zwalnia go, należy zwiększyć liczbę w numerze TextView
. powtórz to samo, o ile użytkownik nie zwolni Button
. Innymi słowy: Jak zwiększać liczbę w kółko, dopóki użytkownik przytrzyma przycisk?Powtórz czynność po naciśnięciu długiego przycisku.
Odpowiedz
Ogólnym podejściem (nie specyficznym dla systemu Android) byłoby wykrycie zdarzenia typu "naciśnij i zwolnij" osobno. Wydarzenie prasowe rozpoczyna okresowe zadanie (Runnable
lub Thread
), które dodaje się do licznika (powiedzmy 5 razy na sekundę lub raz na 200 ms). Zdarzenie wydania zatrzymuje zadanie okresowe.
- Skonfiguruj
View.OnLongClickListener
dla przycisku - Daj swoją aktywność
Runnable
i zainicjować (ale nie go uruchomić) po załadowaniu aktywność - mają OnLongClickListener wykonywać swoje zadanie regularnego aktualizowania asynchronicznej pole tekstowe i sprawdzanie czasu od jego pierwszego kliknięcia
- Utwórz
OnTouchListener
, który zatrzymujeRunnable
, gdy zdarzenie dotykowe zostanie ponownie zmienione.
wiem, że to brulion, ale to jest naprawdę przydatny wzór, aby móc ponownie użyć i modyfikować, więc warto zatapiając swoje szpony w nim ...
Musisz zaplanować asynchroniczne powtarzanie zdarzenia po otrzymaniu zdarzenia mousePressed
i zatrzymanie go po otrzymaniu zdarzenia mouseReleased
.
Istnieje wiele sposobów radzenia sobie z tym w Javie. Lubię korzystać z klas java.util.concurrent
, które są dość elastyczne. Należy jednak pamiętać o kilku rzeczach:
Jeśli twoje asynchroniczne zdarzenia nie występują w wątku wywołania zdarzenia, musisz ustawić tekst JButton
używając 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. Zmiana koloru tekstu przycisku po naciśnięciu przycisku
- 2. Ignorowanie UIGestureRecognizer po naciśnięciu przycisku
- 3. Powtórz czynność w języku JavaScript po przyciśnięciu myszy
- 4. Przejdź do adresu URL po naciśnięciu przycisku OK po naciśnięciu przycisku
- 5. UISearchController odrzuca VC po naciśnięciu przycisku anulowania
- 6. Ciągle zwiększaj wartość całkowitą po naciśnięciu przycisku.
- 7. Ustaw AVPlayerViewController odtwarzane po naciśnięciu przycisku
- 8. Wykrywanie po naciśnięciu przycisku "Powrót do aplikacji"
- 9. Jak zabić działanie po naciśnięciu przycisku Wstecz?
- 10. ANDROID: Jak ustawić opóźnienie po naciśnięciu przycisku?
- 11. wywołanie funkcji po naciśnięciu przycisku - pyqt
- 12. Android - Menu podręczne po naciśnięciu przycisku listy?
- 13. Mieć wiele komend po naciśnięciu przycisku
- 14. Zapisz stan po naciśnięciu przycisku Wstecz.
- 15. Odrzuć DatePickerDialog po naciśnięciu przycisku cofania
- 16. Wyjątek po naciśnięciu przycisku na facebooku logowanie
- 17. jquery javascript: wykonaj czynność po wybraniu przycisku radiowego
- 18. UIRefreshControl - Jak wykonać czynność odświeżania po zwolnieniu przycisku dotykowego?
- 19. "Nie można znaleźć wyjątku klasy android.transition.Transition" po naciśnięciu przycisku cofania
- 20. Czynność po zamknięciu formularza
- 21. przechowywać klawiaturę otwarte po naciśnięciu klawisza Enter
- 22. Czynność kliknięcia przycisku w systemie Android?
- 23. Jak zamknąć klawiaturę po naciśnięciu przycisku "Szukaj" paska UISearch?
- 24. Android: monit o zapisanie zmian po naciśnięciu przycisku Wstecz.
- 25. Zmiana koloru tła przycisku paska zadań po naciśnięciu
- 26. Jak określić nazwę użytkownika i hasło po naciśnięciu przycisku dokowania?
- 27. Formularz HTML wykonuj "akcję" po naciśnięciu przycisku "Wyślij"
- 28. Jak zrobić wzrost UIPickerView od dołu aplikacji po naciśnięciu przycisku?
- 29. Jak zmienić kolor przycisku koloru po naciśnięciu w systemie Android?
- 30. zdarzenia nie wypalania po naciśnięciu przycisku pomocy na MessageBox
+1 To brzmi jak proces specyficzny dla Androida, który opisałem bardziej ogólnie. –