2013-06-29 10 views
25

Sono confuso dai due metodi in Android. È sembra che entrambi i metodi ti dicono che tipo di evento è, , vale a dire se si tratta di un evento verso il basso o verso l'alto.In Android, qual è la differenza tra getAction() e getActionMasked() in MotionEvent?

Quando userò quale?

public void onTouchEvent(MotionEvent e) 

non cito la documentazione per favore, perché l'ho letto, e non vedo alcun parametro che posso fornire a uno dei metodi per ottenere qualcosa di diverso.

public final int getAction() 

e

public final int getActionMasked() 

risposta

18

Sì, entrambi restituiscono l'azione (Up/Down, ecc), ma getAction può restituire l'azione con informazioni puntatore, nel qual caso gli eventi possono essere un po 'diverso . getActionMasked restituirà sempre azioni "semplici" con le informazioni del puntatore "Masked out" (get it?), quindi chiamerai getPointerIndex sullo stesso evento per ottenere l'indice del puntatore. Nota che lo vedrai più comunemente su dispositivi multi-touch con più punti di contatto (puntatori). L'indice puntatore è essenzialmente un modo per associare gli eventi ai punti di contatto in modo da poterli distinguere.

+0

che cosa è questa informazione puntatore? –

+0

Campi bit aggiuntivi nel valore di ritorno; l'azione e l'indice del puntatore vengono restituiti nello stesso intero.Android definisce un set di maschere di bit per estrarle (che è essenzialmente ciò che fa getActionMasked) –

29

getAction() restituisce un ID puntatore e un evento (cioè, su, giù, sposta) informazioni.

getActionMasked() restituisce solo un evento (ad esempio, su, giù, sposta) le informazioni. Altre informazioni sono mascherate.

Ad esempio:

getAction() restituisce0x0105.
getActionMasked() restituirà 0x0005, che è 0x0105 & & ACTION_MASK.

  1. Il valore di ACTION_MASK è 0xFF. Maschera le seguenti azioni.
    • ACTION_DOWN 0, 1 UP, MOVE 2
    • ACTION_POINTER_DOWN 5, UP 6
  2. Il valore di ACTION_POINTER_ID_MASK è 0xFF00. Ha mascherato l'ID del puntatore dalle seguenti costanti deprecate.
    • ACTION_POINTER_1_DOWN 0x0005
    • ACTION_POINTER_2_DOWN 0x0105
    • ACTION_POINTER_3_DOWN 0x0205
    • ...
+0

Non lo vedo ancora: perché dovrei voler usare getActionMasked()? ha mai avuto qualche vantaggio su getAction()? – peedee

+3

@peedee Con 'getAction()', è necessario cambiare la maschera/maschera per separare queste due parti di dati; mentre con 'getActionMasked()' e 'getActionIndex()' li ottieni separatamente (ma probabilmente a un costo di runtime più elevato, a causa di due chiamate di funzioni separate). Immagino che la rappresentazione combinata restituita da 'getAction()' sia ciò che viene utilizzato internamente nel sistema operativo Android, dal momento che avere due valori combinati in questo modo è più efficiente per la memorizzazione e la cache sull'hardware mobile, tenendo presente che l'API touch memorizza anche una cronologia dei recenti eventi di tocco, quindi potrebbero essere memorizzati molti di questi dati. –