2011-06-17 11 views
22

Wprowadzam niestandardowy TextView i chcę wykonać pewne działanie po dotknięciu widoku. Pomyślałem, że metoda onTouchEvent dałaby mi pełny zakres akcentów na widoku bez konieczności używania setOnTouchListener (próbuję wykonać całą moją pracę wewnątrz widoku zamiast w działaniu, aby była przenośna), ale zarejestrowano tylko jedno zdarzenie dotykowe to ACTION_DOWN. Jeśli ustawię wartość OnTouchListener w działaniu, korzystając z tej opcji, otrzymam pełny zakres zdarzeń dotyku, ale nie będzie to miało wartości onTouchEvent.View.onTouchEvent rejestruje tylko wydarzenie ACTION_DOWN

Ktoś wie, dlaczego tak jest, czy może ktoś oferuje mi rozwiązanie, które nie wymaga użycia setOnTouchListener (co uniemożliwiłoby działanie wdrożeniowe z ustawieniem własnego słuchacza)?

Odpowiedz

55

Należy zwrócić wartość true, aby uzyskać następujące zdarzenia po opuszczeniu.

+1

Jeśli to zrobię, wtedy dowolne aplikacje korzystające z kliknięć/kliknięć z działania nigdy nie zostaną wyzwolone. Nie chcę wyłączać funkcji. Chcę tylko przechwycić wszelkie dotknięcia, zanim zostaną wysłane, ale nadal je wysłać. Wywołanie "dispatchTouchEvent" po prostu ponownie wywołuje 'onTouchEvent', powodując przepełnienie stosu (lol). –

+2

Jeśli znajdujesz się w kontenerze ViewGroup, możesz zastąpić onInterceptTouchEvent(), aby monitorować zdarzenia dotykowe wysyłane do potomków. Poza tym (lub bezpośrednio podłączenie do dispatchTouchEvent - niezalecane), nie możesz robić tego, co chcesz. Dyspozytor MotionEvent polega na znalezieniu celu za pośrednictwem pierwszego odbiorcy, który zwraca wartość true, a następnie wysyła wszystkie następujące zdarzenia do tego celu. – hackbod

+0

Wystarczająco fair. Chyba muszę wiedzieć, jak mieć słuchacza dotykowego w niestandardowym widoku, który nie przeszkadza klasie implementującej mieć własnego w pełni funkcjonalnego słuchacza dotykowego, ale na pewno odpowiedziałeś na pytanie w tytule. –