Muszę wyłączyć przesuwanie, aby otworzyć/zamknąć SlidingPaneLayout, ponieważ moim głównym widokiem jest mapa. Otwieram/zamykam za pomocą przycisku.Android, wyłącz przesuwanie w celu interakcji z SlidingPaneLayout
Odpowiedz
Podklasa, przesuń onInterceptTouchEvent()
i spraw, aby zawsze zwracała false
. Zapobiegnie to obsłudze zdarzeń dotykowych przez SlidingPaneLayout
.
Aby uzyskać więcej informacji, zobacz http://developer.android.com/training/gestures/viewgroup.html.
Aktualizacja:
Jeśli zdarzenia dotykowe nie są obsługiwane przez widoku (ów) dziecka, SlidingPaneLayout
„s onTouchEvent()
metoda zostanie wywołana mimo wszystko. Aby całkowicie wyłączyć obsługę zdarzeń dotykowych, należy również zastąpić onTouchEvent()
i zawsze zwracać false
.
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return false;
}
Uwaga: Wadą tego podejścia jest to, że zdarzenia dotykowe wciąż wysyłane do drugiego widzenia dziecka, kiedy jest tylko częściowo widoczne. Więc możesz sprawdzić inne odpowiedzi.
Myślę, że powinien zwrócić wartość true, ale nie false. – GMsoF
@GMsoF powinien zwrócić wartość false. – Zeba
Jeśli ** onInterceptTouchEvent() ** zwraca wartość false, ** onTouchEvent() ** nie zostanie wywołane. Według twojego linku. Ale nie przetestowałem tego. Problemem tego podejścia (o ile wiem) jest to, że gdy lewe okienko jest otwarte, można je zamknąć tylko przez naciśnięcie klawisza powrotu. Myślę, że rozwiązanie ** quicksilver ** jest właściwą odpowiedzią – Arash
Ten jest nieco skomplikowany. Jeśli zawsze zwrócisz wartość true w onInterceptTouchEvent()
, spowoduje to wysłanie zdarzenia do ukrytej treści poniżej. Udało mi się to osiągnąć w następujący sposób:
zadziałało dla mnie .. Wybrane. –
Dobra odpowiedź. Bez zwracania fałszu w onTouchEvent Możesz nadal otwierać menu klikając na krawędź ekranu. –
Ten kod wywołuje tylko TouchEvents w prawym okienku (drugie dziecko). Jeśli chcesz, aby oba panele pozostały interaktywne, użyj czegoś takiego w TouchEvent: 'if (! GetChildAt (0) .dispatchTouchEvent (ev)) getChildAt (1) .dispatchTouchEvent (ev);'. Przesyła się do prawego panelu, jeśli lewy nie obsługuje zdarzenia. – random6174
W oparciu o odpowiedź Roman Zhilichs z dwoma ulepszeniami.
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return !swipeEnabled || super.onInterceptTouchEvent(ev);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (!swipeEnabled) {
if (!getChildAt(0).dispatchTouchEvent(ev)) {
ev.offsetLocation(-getChildAt(0).getWidth(),0);
getChildAt(1).dispatchTouchEvent(ev);
}
return true;
}
return super.onTouchEvent(ev);
}
Najpierw próbuje wysłać MotionEvent do pierwszego dziecka przed wysłaniem go do drugiego. W ten sposób oba widoki podrzędne pozostają interaktywne. Po drugie, ruchy programu MotionsEvent wysyłane do drugiego widoku podrzędnego muszą być przesunięte o szerokość pierwszego widoku. Zakłada się, że przesuwna szyba przesuwa się z lewej strony, jak zwykle w przypadku SlidingPaneLayout.
Jeśli chcesz wyłączyć „przeciągnij, aby otworzyć” imprezę i umożliwić wejście użytkownika, gdy układ jest otwarty, można użyć tej
@Override
public boolean onInterceptTouchEvent(MotionEvent arg0) {
if(!isOpen()) return false;
return super.onInterceptTouchEvent(arg0);
}
Jeśli ustawisz touchlistener i powrócić prawda, to zużywają zdarzenie dotyku i widżet nie będzie go obsługiwał dalej.
slidingPaneLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
return true;
}
});
- 1. Android, slidingpanelayout vs navigationDrawer
- 2. Android, SlidingPaneLayout i listView
- 3. Korzystanie Androida SlidingPaneLayout z ViewPager
- 4. Korzystanie z SlidingPaneLayout z prawej strony?
- 5. Android obsługa interakcji z wieloma działaniami
- 6. Kliknij zdarzenia na SlidingPaneLayout
- 7. Powiększanie i przesuwanie ImageView Android
- 8. Przesuwanie w górę i przesuwanie w dół animacji w widoku internetowym w systemie Android
- 9. Android: wyłącz podświetlanie w GridView
- 10. ggplot aes_string z interakcji
- 11. Android: Menu przesuwane Przesuwanie tylko treści
- 12. Włącz/wyłącz Android ActionBar.Tab
- 13. Wykres interakcji w ggplot2
- 14. Przesuwanie wielokątów w JavaScript
- 15. make: wyłącz równoległy budynek w podkatalogu tylko dla pojedynczego celu
- 16. Wysyłaj wiadomości e-mail w systemie Android bez interakcji użytkownika
- 17. Proste sposoby interakcji z usługami?
- 18. Wyłącz klucze sprzętowe Android rom
- 19. Wykryj przesuwanie w UICollectionView
- 20. Przesuwanie divs poziomo z JQuery
- 21. Android - przycisk Wyłącz urządzenie Powrót
- 22. Android: Wyłącz aplikację dla tabletu
- 23. Android: Włącz/wyłącz przycisk w Runtime?
- 24. Wyłącz UISearchBar
- 25. Wykrywanie twarzy w Androidzie bez interakcji użytkownika
- 26. Niestandardowe przesuwanie do odblokowania
- 27. Czy zdarzenie SelectionChanged w WPF może być obsługiwane tylko w celu interakcji użytkownika?
- 28. Przesuwanie zawartości/zmiana strony
- 29. Macierz interakcji równoległych w R
- 30. Przesuwanie kursora w języku Java
Witam, jak udało Ci się rozwiązać problem? Czy możesz udostępnić kod? Dzięki. – GMsoF