Chcę, aby moja aplikacja rozpoznała, kiedy użytkownik przesuwa palcem z prawej do lewej na ekranie telefonu.
Jak to zrobić?
android
swipe
gesture-recognition
endryha
źródło
źródło
Odpowiedzi:
OnSwipeTouchListener.java :
Stosowanie:
źródło
OnSwipeTouchListener
który odbiera kontekst, ponieważ ten konstruktorGestureDetector
jest przestarzały od poziomu API 3 iGestureDetector
tworzy instancję w tym konstruktorze.onTouch
doOnSwipeTouchListener
definicji, w przeciwnym razie moje IDE wyświetli błąd „uzyskiwania dostępu do członka prywatnego”Ten kod wykrywa przesunięcia w lewo i w prawo, unika przestarzałych wywołań interfejsu API i ma inne różne ulepszenia w porównaniu z wcześniejszymi odpowiedziami.
Użyj tego w ten sposób:
źródło
setOnTouchListener
(zwykle wonCreate
).context
jestthis
wskaźnikiem (chyba że tworzysz fragment).Fragment.getActivity()
.Jeśli musisz również przetworzyć zdarzenia kliknięcia, niektóre modyfikacje:
I przykładowe użycie:
źródło
Rozwijanie odpowiedzi Mireka, na przykład, gdy chcesz użyć gestów przeciągania w widoku przewijania. Domyślnie nasłuchiwanie dotykowe dla widoku przewijania jest wyłączone i dlatego przewijanie się nie dzieje. Aby to naprawić, musisz zastąpić
dispatchTouchEvent
metodęActivity
i zwrócić odziedziczoną wersję tej metody po zakończeniu pracy z własnym detektorem.Aby wprowadzić kilka zmian w kodzie Mireka: dodam getter dla
gestureDetector
wOnSwipeTouchListener
.Zadeklaruj
OnSwipeTouchListener
wnętrze działania jako pole obejmujące całą klasę.Zmodyfikuj odpowiednio kod użytkowania:
I zastąp
dispatchTouchEvent
metodę wewnątrzActivity
:Teraz powinny działać operacje przewijania i przeciągania.
źródło
W celu uzyskania
Click Listener
,DoubleClick Listener
,OnLongPress Listener
,Swipe Left
,Swipe Right
,Swipe Up
,Swipe Down
na pojedynczychView
trzebasetOnTouchListener
. to znaczy,Do tego potrzebujesz
OnSwipeTouchListener
klasy, która implementujeOnTouchListener
.źródło
Nie potrzebujesz skomplikowanych obliczeń. Można to zrobić tylko za pomocą
OnGestureListener
interfejsu zGestureDetector
klasy.Wewnątrz
onFling
metody możesz wykryć wszystkie cztery kierunki w ten sposób:MyGestureListener.java
:stosowanie:
źródło
velocityX
ivelocityY
wonFling
metodzie. chociaż możesz eksperymentować, aby zobaczyć, która wartość najlepiej odpowiada Twoim potrzebom, ale ostateczna liczba byłaby uniwersalna.Użyj SwipeListView i pozwól obsłużyć wykrywanie gestów za Ciebie.
źródło
Wersja @Mirek Rusin Kotlina jest tutaj:
OnSwipeTouchListener.kt:
Stosowanie:
open
kluczowe był punkt dla mnie ...źródło
Aby dodać również onClick, oto co zrobiłem.
Używam fragmentów, więc używam getActivity () do kontekstu. Tak to wdrożyłem - i działa.
źródło
Metoda @ Edwarda Brey'a działa świetnie. Jeśli ktoś chciałby również skopiować i wkleić importowane pliki
OnSwipeTouchListener
, oto:źródło
Mała modyfikacja odpowiedzi @Mirek Rusin, a teraz możesz wykryć przeciągnięcia wielodotykowe. Ten kod znajduje się na Kotlin:
Gdzie Gest.SWIPE_RIGHT i inne są unikatowymi wskaźnikami liczb całkowitych gestów, których używam do wykrywania rodzaju gestów w dalszej części mojej aktywności:
Widzicie więc, że gest jest zmienną całkowitą zawierającą wartość, którą wcześniej przekazałem.
źródło
Moje rozwiązanie jest podobne do powyższych, ale wyodrębniłem obsługę gestów do klasy abstrakcyjnej
OnGestureRegisterListener.java
, która obejmuje gesty przeciągania , klikania i długiego kliknięcia .OnGestureRegisterListener.java
I używaj go w ten sposób. Pamiętaj, że możesz łatwo przekazać swój
View
parametr.źródło
Robiłem podobne rzeczy, ale tylko dla przesunięć poziomych
A potem można go użyć do wyświetlania komponentów
źródło
To pytanie zostało zadane wiele lat temu. Teraz jest lepsze rozwiązanie: SmartSwipe: https://github.com/luckybilly/SmartSwipe
kod wygląda następująco:
źródło
@Mirek Rusin answeir jest bardzo dobry. Ale jest mały błąd i wymagana jest poprawka -
Co za różnica? Ustawiamy wynik = prawda, tylko jeśli sprawdziliśmy, czy wszystkie wymagania (zarówno SWIPE_THRESHOLD, jak i SWIPE_VELOCITY_THRESHOLD są w porządku). Jest to ważne, jeśli odrzucimy przesunięcie, jeśli niektóre wymagania nie zostaną osiągnięte, i musimy zrobić coś w metodzie onTouchEvent metody OnSwipeTouchListener!
źródło
Oto prosty kod Androida do wykrywania kierunku gestów
W
MainActivity.java
iactivity_main.xml
napisz następujący kod:źródło
źródło
Jeśli chcesz wyświetlać niektóre przyciski z akcjami po przesunięciu elementu listy, wiele bibliotek w Internecie ma takie zachowanie. Wdrożyłem bibliotekę, którą znalazłem w Internecie i jestem bardzo zadowolony. Jest bardzo prosty w użyciu i bardzo szybki. Poprawiłem oryginalną bibliotekę i dodałem nowy detektor kliknięć dla kliknięcia elementu. Dodałem również niesamowitą bibliotekę czcionek ( http://fortawesome.github.io/Font-Awesome/ ), a teraz możesz po prostu dodać nowy tytuł elementu i określić nazwę ikony z niesamowitej czcionki.
Oto link do github
źródło
źródło
wykorzystanie odpowiedzi Edwarda Breya w Kotlinie
źródło