2011-10-11 9 views

risposta

4

Il ACTION_MASK viene utilizzato per separare l'azione effettiva e l'identificatore del puntatore (ad es., Il primo dito sfiorato, il secondo dito sfiorato, ecc.) I primi 8 bit del valore restituito in getAction() sono la parte di azione effettiva, quindi quando si bitwise-AND con il action mask (= 11111111 = 255 = 0xff), si rimane solo con l'azione e nessuna delle informazioni del puntatore.

In Android 1.5/API livello 3, non abbiamo avuto il supporto nella classe MotionEvent per più puntatori (cioè multitouch). Per un singolo evento puntatore, i bit del puntatore non sono impostati. È possibile quindi basta confrontare l'evento con la costante azione desiderata per ottenere l'assegno per la particolare azione:

if ((event.getAction() == MotionEvent.ACTION_MOVE) {...} 

Nel caso improbabile che questo non funziona, si può provare a definire il proprio maschera costante azione di essere 255 e bit a bit - E con l'azione come nelle versioni successive dell'API.

Sul docs per MotionEvent (o addirittura su qualsiasi pagina di riferimento Android), è presente una casella di controllo per filtrare in base al livello API. Se si seleziona il livello API 3, è possibile visualizzare lo stato di tale classe al momento. Tutti i metodi e le costanti relativi ai diversi puntatori sono disattivati.

+0

Grazie mille per il vostro tempo e la vostra risposta. Mi sto ancora chiedendo perché questa espressione si risolverebbe su false versioni Android più recenti. Questo * funziona * su qualsiasi dispositivo/livello da 3 a ora? Se sì, è a causa delle informazioni di destinazione/min_sdk che ho inserito nella creazione del progetto? – unR

+1

L'espressione è sempre valida per singoli eventi di tocco del puntatore, anche per livelli API successivi. Per un singolo puntatore, gli altri bit (puntatore) non sono impostati, quindi non è necessario per la maschera. – antonyt

+0

grazie mille. accettato – unR

Problemi correlati