2012-07-05 15 views
6

Dokumentacja powiedzieć o tym, że:Android - Jak obsługiwać dwa dotykową

Gest zaczyna się od zdarzenia ruchu z ACTION_DOWN który zapewnia lokalizację pierwszego wskaźnika w dół. Ponieważ każdy dodatkowy wskaźnik , który przechodzi w dół lub w górę, struktura wygeneruje zdarzenie ruchu z odpowiednio ACTION_POINTER_DOWN lub ACTION_POINTER_UP.

więc mam zrobić nadpisanie funkcji onTouchEvent w mojej działalności:

@Override 
public boolean onTouchEvent(MotionEvent MEvent) 
{ 

    motionaction = MEvent.getAction(); 

    if(motionaction == MotionEvent.ACTION_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER1 " + MEvent.getActionIndex()); 
    } 

    if(motionaction == MotionEvent.ACTION_POINTER_DOWN) 
    { 
     System.out.println("DEBUG MESSAGE POINTER2 " + MEvent.getActionIndex()); 
    } 

} 

Niestety drugi, jeśli nie jest podana. Działanie zawiera 2 widok z 2 OnTouchListener, wiem, że onTouchEvent jest wywoływany tylko wtedy, gdy widok działania nie zużywają zdarzenia, więc próbowałem zwrócić wartość false w odbiorniku i w ten sposób mogę rozpoznać tylko dotknięcie pierwszego palca, ale to pozwala uniknąć słuchacza, aby odebrać wydarzenie ACTION_UP i nie pozwala mi rozpoznać drugiego dotknięcia palcem. Próbowałem również zwrócić true w słuchaczu, ale po ręcznym wywołaniu funkcji onTouchEvent, to pozwoli mi rozpoznać tylko pierwszy dotyk palca.

Co jest nie tak w moim kodzie?

Odpowiedz

15

wierzę kod brakuje operacji maskowania jak:

switch (motionaction & MotionEvent.ACTION_MASK) { 
case MotionEvent.ACTION_POINTER_DOWN: 
} 

Kod ten powinien być w stanie sprawdzić ACTION_POINTER_DOWN.

Powodzenia & Powiedz nam, co się stanie.

Tommy Kwee

+0

Tak, to jest problem. Dodanie "i" z ACTION_MASK rozwiązało problem. Wkurza mnie to, że w oficjalnej dokumentacji nic o tym nie mów. – Bemipefe

+0

Bernipefe, czuję się dla ciebie proszę pana. Każdy może popełnić błąd w dokumentacji. Ten jest prawdopodobnie częstym błędem, ponieważ czasami nie musisz maskować. Moja jedyna sugestia, aby następnym razem użyć debuggera, aby zobaczyć, jakie wartości przychodzą, i zobaczyć, czy któraś z wartości jest zgodna z oczekiwaniami. Powodzenia dla innego fana Androida! –

+0

Mogę pobrać ACTION_POINTER_UP i ACTION_POINTER_DOWN, ale nie mogę znaleźć sposobu na pobranie ACTION_MOVE. Mogę go pobrać w trybie pojedynczego palca w odbiorniku widoku, ale kiedy kładę drugi palec na ekranie, jedyną rzeczą, którą mogę grupować z metody onTouchEvent jest działanie GÓRA i DÓŁ, ​​a nie MOVE. Jak to naprawić? – Bemipefe

Powiązane problemy