Multitouch

10 settembre 2014

Quanto visto nel capitolo precedente riguardava esclusivamente eventi scatenati da un singolo puntatore; o meglio, considerato che ci stiamo riferendo alla mano dell’utente, da un solo dito. Sono i cosiddetti eventi single touch. Molto frequenti sono comunque gli eventi multitouch, cioè quelli provocati dall’uso congiunto di più dita. Si pensi a quando, per rimpicciolire un’immagine, puntiamo due dita sul display e senza sollevarle le avviciniamo tra loro.

Concettualmente il multitouch nelle app Android presenta gli stessi fondamenti del suo “cugino” single. Ugualmente si farà uso di:

  • TouchEventListener per designare il componente incaricato di ricevere gli eventi relativi al touch;
  • onTouchEvent sarà il metodo nel quale verranno recapitate le informazioni relative all’evento rilevato;
  • MotionEvent sarà la tipologia di oggetto che veicolerà le informazioni acquisite come posizioni dei puntatori e tipologie di evento.

La differenza starà nel fatto che dovranno essere rese contemporaneamente disponibili tutte le informazioni sulla posizione dei singoli puntatori. Ciò permetterà in questa sede di approfondire la struttura di MotionEvent che, probabilmente, quando si tratta il semplice single touch appare molto più elementare di quello che realmente sia.

Si consideri innanzitutto che tutte le dita poggiate contemporaneamente sul display costituiscono con i loro movimenti una “gestualità” complessiva. Il MotionEvent assegnerà un ID ad ogni puntatore e se ne servirà per distinguere le informazioni raccolte per ognuno di essi.

All’interno del metodo onTouchEvent risulteranno molto utili i seguenti metodi di MotionEvent:

  • getPointerCount: restituisce il numero di puntatori attualmente sul display;
  • getActionIndex: fornisce l’indice del puntatore che viene trattato in questa singola invocazione di onTouchEvent;
  • getPointerId: restituisce l’id del singolo puntatore indicato dall’indice passato in input, solitamente fornito da getActionIndex;
  • getX e getY: servono a recuperare le coordinate del singolo puntatore indicato dall’indice, anche in questo caso, ottenuto con getActionIndex;
  • getActionMasked: ritorna il codice identificativo del tipo di azione compiuta.

Per quanto riguarda gli eventi, nel capitolo precedente, avevamo attuato un’analisi del click su schermo suddividendolo nelle fasi di ACTION_DOWN (posare il dito sullo schermo) e ACTION_UP (sollevare il dito). Nel multitouch, la filiera delle fasi da osservare sarà leggermente più lunga:

  • ACTION_DOWN: rappresenta l’inizio del movimento. Corrisponde al primo puntatore che tocca lo schermo. Le informazioni corrispondenti si troveranno all’indice 0 del MotionEvent;
  • ACTION_POINTER_DOWN: per ogni altro puntatore, dopo il primo, che toccano lo schermo nella stessa “gestualità”. Il metodo getActionIndex() fornirà la posizione nel MotionEvent che contiene i dati di questo singolo evento;
  • ACTION_MOVE: non vengono aggiunti puntatori ma avviene un cambiamento, come uno spostamento;
  • ACTION_POINTER_UP: segnala che un puntatore non primario, ossia uno che ha toccato il display dopo il primo, viene sollevato;
  • ACTION_UP: invocato quando anche il primo puntatore, quello che ha dato inizio al movimento, è stato sollevato. La gestualità si è completata.

Tutte le lezioni

1 ... 41 42 43 ... 85

Se vuoi aggiornamenti su Multitouch inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Multitouch

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy