Mam kilka małych pytań związanych z maskowaniem zdarzeń dotykowych. Czytałem wiele rzeczy tutaj i gdzie indziej, ale wciąż jestem trochę zmieszany z częściami.Android multitouch i getActionMasked()
1) Czy event.getActionMasked()
samo jak event.getAction() & MotionEvent.ACTION_MASK
(wydają się być na Samsung S2 i HTC Desire)
2) Czy oba powyższe polecenia podać wszystkie informacje i więcej niż event.getAction()
sam będzie, czy jest to inna .
3) Napisałem kawałek kodu, który mówi, gdzie jest dotyk, a za pomocą którego wskaźnik jest nieużywany (tylko w przypadku dwóch dotknięć w danym momencie). Wygląda na to, że działa poprawnie na wymienionych wyżej urządzeniach, ale wiem, jak niektóre urządzenia mogą działać zupełnie inaczej, jeśli nie są absolutnie poprawne. Zastanawiam się więc, czy poniższe informacje są poprawne i będą się zachowywać na wszystkich urządzeniach.
boolean pointer0down=false, pointer1down=false;
String st="", str0 ="", str1 ="";
public boolean onTouchEvent(MotionEvent event)
{
if (event.getActionMasked()==MotionEvent.ACTION_UP
||event.getActionMasked()==MotionEvent.ACTION_POINTER_UP
||event.getActionMasked()==MotionEvent.ACTION_CANCEL)
{
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==0)
pointer0down=false;
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==1)
pointer1down=false;
}
if (event.getActionMasked()==MotionEvent.ACTION_DOWN
||event.getActionMasked()==MotionEvent.ACTION_POINTER_DOWN)
{
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==0)
pointer0down=true;
if (event.getPointerId((event.getActionIndex()& MotionEvent.ACTION_MASK))==1)
pointer1down=true;
}
if (pointer0down)
str0="\tx: " + event.getX(0) + "\ty: "+event.getY(0);
else
str0="\tNot down";
if (pointer1down)
str1="\tx: " + event.getX(1) + "\ty: "+event.getY(1);
else
str1="\tNot down";
st="pointer0:"+str0+"\npointer1:"+str1;
return true;
}
Doskonałe wyjaśnienie! – George