2010-07-09 11 views
6

Próbuję zaimplementować funkcję pinch-zoom w tworzonej aplikacji i mam problemy ze zdarzeniem onTouch. Wygląda na to, że ruchy w górę do góry o & nie strzelają natychmiast, tak jakbyś nie miał wskaźnika w górę lub w dół, dopóki nie pojawi się ruch akcji. Co się dzieje, gdy oba palce dotykają ekranu niemal jednocześnie, to to, że drugi palec (powinien być wskaźnikiem (1)) dostaje ruch, zanim wywoływany jest wskaźnik, co powoduje, że kod myśli, że jest to DRAG, a nie przybliżenie. Ktoś jeszcze to widział? W każdym razie dookoła niego? Dzięki.Zdarzenie onTouch czasami nie wyzwala ACTION_POINTER_DOWN

Odpowiedz

0

Miałem ten sam problem w moim projekcie. Jeśli dotknę ekranu, a moje palce są zbyt blisko, system nie zrealizuje zdarzenia wielodotykowego. Myślę, że to dlatego, że kiedy twoje palce są zbyt blisko, system postrzega je jako pojedynczy palec.

Być może możesz sprawdzić to założenie, używając metody getSize(), aby oszacować obszar ekranu wciśniętego po dotknięciu ekranu jednym palcem i po dotknięciu ekranu dwoma palcami blisko grzałki.

+0

Dzięki za radę, która się przyda, jestem pewien. Ale nie jestem pewien, że to mój problem, ponieważ występuje bez względu na to, gdzie dotknę ekranu. Korzystając z debuggera, widzę, że zdarzenia wznoszenia i opuszczania wskaźnika są zawsze opóźnione i występują po zdarzeniu przenoszenia (a zdarzenie przenoszenia zawsze ma tylko jeden wskaźnik w tym przypadku). Próbowałem nawet aplikacji "Dotty" i widziałem w niej to samo zachowanie. Czy to może być problem ze sprzętem? Mam Evo w/custom ROM. Dzięki. – JStew

0

Okazało się, że jest to problem z niestandardową pamięcią ROM, którą wysłałem do mojego Evo. Jeszcze raz dziękuję hara za ich rady, ponieważ okazało się, że to kolejny błąd, który miałem.

1

obliczu tego samego problemu okazało się, że ACTION_POINTER_2_DOWN był zwolniony w mojej aplikacji, kiedy dotknął drugi palec, a potem ACTION_MOVE został zwolniony metoda getAction() daje liczbę zdarzeń, które musi być sprawdzone przeciwko tej liście

+0

http://developer.android.com/reference/android/view/MotionEvent.html#ACTION_MOVE – Omkar

29

Pamiętaj, aby włączyć MotionEvent.ACTION_MASK w swoim przełączniku. Na przykład:

switch(event.getAction() & MotionEvent.ACTION_MASK){ 
case MotionEvent.ACTION_DOWN: 
some code 
break; 
case MotionEvent.ACTION_POINTER_DOWN: 
ETC 
+0

WOW! To faktycznie rozwiązało mój problem! Nie rozumiem dlaczego ... ale hej! Dzięki: D – Supercelo

+0

You da real mvp @tayler! – Sipty

+0

uratowałeś mój dzień kochany .. thnxx dużo! –

0

Mam rozwiązać ten sam problem z tym:

switch(event.getActionMasked()) { 
    case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
    break; 
} 
0

Zauważyłem, że ten (MotionEvent.ACTION_POINTER_DOWN) Sprawa wyrzuceniu jeśli onTouch metoda (event) powrócił jako prawda jak podano poniżej:

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    switch(motionEvent.getAction() & MotionEvent.ACTION_MASK) { 
     case MotionEvent.ACTION_POINTER_DOWN: 
     //your code 
     break ; 
    } 
    return true; 
} 

Uwaga: MotionEvent.ACTION_DOWN tylko coraz słuchał jeśli metoda onTouch() ma r przywrócił wartość boolowską jako return super.onTouchEvent (zdarzenie); więc upewnij się, że to prawda, aby uniknąć tej sytuacji.

Powiązane problemy