Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Tocca Dispositivi

Android supporta una varietà di touchscreen e touch pad, inclusi tablet con digitalizzatore a stilo.

I touchscreen sono dispositivi touch associati a un display in modo tale che l'utente abbia l'impressione di manipolare direttamente gli elementi sullo schermo.

I touchpad sono dispositivi touch che non sono associati a un display come un tablet digitalizzatore. I touch pad sono in genere utilizzati per il puntamento o per il posizionamento indiretto assoluto o il controllo basato sui gesti di un'interfaccia utente.

I dispositivi touch possono avere pulsanti le cui funzioni sono simili ai pulsanti del mouse.

A volte i dispositivi touch possono essere manipolati utilizzando una varietà di strumenti diversi come le dita o uno stilo a seconda della tecnologia del sensore tattile sottostante.

I dispositivi touch vengono talvolta utilizzati per implementare chiavi virtuali. Ad esempio, su alcuni dispositivi Android, l'area del sensore del touchscreen si estende oltre il bordo del display e funge da doppio scopo come parte di una tastiera sensibile al tocco.

A causa della grande varietà di dispositivi touch, Android si affida a un gran numero di proprietà di configurazione per descrivere le caratteristiche e il comportamento desiderato di ciascun dispositivo.

Tocca Classificazione dispositivo

Un dispositivo di input è classificato come dispositivo multi-touch se si verificano entrambe le seguenti condizioni:

  • Il dispositivo di input segnala la presenza degli assi assoluti ABS_MT_POSITION_X e ABS_MT_POSITION_Y .

  • Il dispositivo di input non ha pulsanti del gamepad. Questa condizione risolve un'ambiguità con alcuni gamepad che riportano assi con codici che si sovrappongono a quelli degli assi MT.

Un dispositivo di input è classificato come dispositivo a tocco singolo se sono presenti entrambe le seguenti condizioni:

  • Il dispositivo di input non è classificato come dispositivo multi-touch. Un dispositivo di input è classificato come dispositivo single-touch o come dispositivo multi-touch, mai entrambi.

  • Il dispositivo di input segnala la presenza degli assi assoluti ABS_X e ABS_Y e la presenza del codice chiave BTN_TOUCH .

Una volta che un dispositivo di input è stato classificato come dispositivo touch, la presenza di chiavi virtuali viene determinata tentando di caricare il file della mappa delle chiavi virtuali per il dispositivo. Se è disponibile una mappa delle chiavi virtuale, viene caricato anche il file di layout delle chiavi per il dispositivo.

Fare riferimento alla sezione seguente relativa alla posizione e al formato dei file delle mappe delle chiavi virtuali.

Successivamente, il sistema carica il file di configurazione del dispositivo di input per il dispositivo touch.

Tutti i dispositivi touch integrati devono avere file di configurazione del dispositivo di input. Se non è presente alcun file di configurazione del dispositivo di input, il sistema sceglierà una configurazione predefinita appropriata per le periferiche touch tipiche per scopi generici come touchscreen o touch pad HID USB o Bluetooth esterni. Queste impostazioni predefinite non sono progettate per schermi touch integrati e molto probabilmente comporteranno comportamenti errati.

Dopo aver caricato la configurazione del dispositivo di input, il sistema classificherà il dispositivo di input come touchscreen , touch pad o dispositivo puntatore .

  • Un dispositivo touch screen viene utilizzato per la manipolazione diretta di oggetti sullo schermo. Poiché l'utente tocca direttamente lo schermo, il sistema non richiede alcun costo aggiuntivo per indicare gli oggetti manipolati.

  • Un dispositivo touch pad viene utilizzato per fornire informazioni di posizionamento assolute a un'applicazione relativa ai tocchi su una determinata area del sensore. Può essere utile per i tablet digitalizzatori.

  • Un dispositivo puntatore viene utilizzato per la manipolazione indiretta di oggetti sullo schermo mediante un cursore. Le dita vengono interpretate come gesti del puntatore multi-touch. Altri strumenti, come gli stilo, vengono interpretati usando posizioni assolute.

    Vedere Gesti indiretti del puntatore multi-touch per ulteriori informazioni.

Le seguenti regole vengono utilizzate per classificare il dispositivo di input come touchscreen , touch pad o dispositivo puntatore .

  • Se la proprietà touch.deviceType è impostata, il tipo di dispositivo verrà impostato come indicato.

  • Se il dispositivo di input segnala la presenza della proprietà di input INPUT_PROP_DIRECT (tramite EVIOCGPROP ioctl), il tipo di dispositivo verrà impostato sul touchscreen . Questa condizione presuppone che i dispositivi touch a ingresso diretto siano collegati a un display anch'esso collegato.

  • Se il dispositivo di input segnala la presenza della proprietà di input INPUT_PROP_POINTER (tramite EVIOCGPROP ioctl), il tipo di dispositivo verrà impostato come puntatore .

  • Se il dispositivo di input segnala la presenza degli assi REL_X o REL_Y relativi, il tipo di dispositivo verrà impostato sul touchpad . Questa condizione risolve un'ambiguità per i dispositivi di input costituiti sia da mouse che da touchpad. In questo caso, il touch pad non verrà utilizzato per controllare il puntatore poiché il mouse lo controlla già.

  • In caso contrario, il tipo di dispositivo verrà impostato come puntatore . Questa impostazione predefinita assicura che i touch pad che non sono stati designati per altri scopi speciali servano a controllare il puntatore.

pulsanti

I pulsanti sono controlli opzionali che possono essere utilizzati dalle applicazioni per eseguire funzioni aggiuntive. I pulsanti sui dispositivi touch si comportano in modo simile ai pulsanti del mouse e sono principalmente utili per i dispositivi touch di tipo puntatore o con uno stilo.

Sono supportati i seguenti pulsanti:

  • BTN_LEFT : mappato su MotionEvent.BUTTON_PRIMARY .

  • BTN_RIGHT : mappato su MotionEvent.BUTTON_SECONDARY .

  • BTN_MIDDLE : mappato su MotionEvent.BUTTON_MIDDLE .

  • BTN_BACK e BTN_SIDE : mappati su MotionEvent.BUTTON_BACK . La pressione di questo pulsante sintetizza anche la pressione di un tasto con il codice tasto KeyEvent.KEYCODE_BACK .

  • BTN_FORWARD e BTN_EXTRA : mappati su MotionEvent.BUTTON_FORWARD . La pressione di questo pulsante sintetizza anche la pressione di un tasto con il codice tasto KeyEvent.KEYCODE_FORWARD .

  • BTN_STYLUS : mappato su MotionEvent.BUTTON_SECONDARY .

  • BTN_STYLUS2 : mappato su MotionEvent.BUTTON_TERTIARY .

Strumenti e tipi di strumenti

Uno strumento è un dito, uno stilo o un altro apparato utilizzato per interagire con il dispositivo touch. Alcuni dispositivi touch possono distinguere tra diversi tipi di strumenti.

Altrove in Android, come nell'API MotionEvent , uno strumento viene spesso definito puntatore .

Sono supportati i seguenti tipi di strumenti:

  • BTN_TOOL_FINGER e MT_TOOL_FINGER : mappato su MotionEvent.TOOL_TYPE_FINGER .

  • BTN_TOOL_PEN e MT_TOOL_PEN : mappato su MotionEvent.TOOL_TYPE_STYLUS .

  • BTN_TOOL_RUBBER : mappato su MotionEvent.TOOL_TYPE_ERASER .

  • BTN_TOOL_BRUSH : mappato su MotionEvent.TOOL_TYPE_STYLUS .

  • BTN_TOOL_PENCIL : mappato su MotionEvent.TOOL_TYPE_STYLUS .

  • BTN_TOOL_AIRBRUSH : mappato su MotionEvent.TOOL_TYPE_STYLUS .

  • BTN_TOOL_MOUSE : mappato su MotionEvent.TOOL_TYPE_MOUSE .

  • BTN_TOOL_LENS : mappato su MotionEvent.TOOL_TYPE_MOUSE .

  • BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP e BTN_TOOL_QUADTAP : mappati su MotionEvent.TOOL_TYPE_FINGER .

Hovering vs. Touching Tools

Gli strumenti possono essere in contatto con il dispositivo touch o nel raggio di azione e posizionarsi sopra di esso. Non tutti i dispositivi touch sono in grado di rilevare la presenza di uno strumento sospeso sopra il dispositivo touch. Quelli che lo fanno, come i digitalizzatori di stilo basati su RF, possono spesso rilevare quando lo strumento si trova in un raggio limitato del digitalizzatore.

Il componente InputReader si occupa di distinguere gli strumenti toccanti dagli strumenti in bilico. Allo stesso modo, gli strumenti toccanti e gli strumenti in bilico vengono segnalati alle applicazioni in diversi modi.

Gli strumenti tattili vengono segnalati alle applicazioni come eventi tattili utilizzando MotionEvent.ACTION_DOWN , MotionEvent.ACTION_MOVE , MotionEvent.ACTION_DOWN , MotionEvent.ACTION_POINTER_DOWN e MotionEvent.ACTION_POINTER_UP .

Gli strumenti di MotionEvent.ACTION_HOVER_ENTER vengono segnalati alle applicazioni come eventi di movimento generici utilizzando MotionEvent.ACTION_HOVER_ENTER , MotionEvent.ACTION_HOVER_MOVE e MotionEvent.ACTION_HOVER_EXIT .

Tocca Requisiti del driver di dispositivo

  1. I driver del dispositivo touch devono registrare solo assi e codici chiave per gli assi e i pulsanti che supportano effettivamente. La registrazione di assi o codici chiave in eccesso può confondere l'algoritmo di classificazione del dispositivo o far sì che il sistema rilevi erroneamente le capacità del dispositivo.

    Ad esempio, se il dispositivo riporta il codice chiave BTN_TOUCH , il sistema supporrà che BTN_TOUCH verrà sempre utilizzato per indicare se lo strumento sta effettivamente toccando lo schermo. Pertanto, BTN_TOUCH non deve essere utilizzato per indicare che lo strumento si trova semplicemente nell'intervallo e in bilico.

  2. I dispositivi a tocco singolo utilizzano i seguenti eventi di input Linux:

    • ABS_X : (RICHIESTO) Riporta la coordinata X dello strumento.

    • ABS_Y : (RICHIESTO) Riporta la coordinata Y dello strumento.

    • ABS_PRESSURE : (opzionale) riporta la pressione fisica applicata sulla punta dell'utensile o l'intensità del segnale del contatto tattile.

    • ABS_TOOL_WIDTH : (facoltativo) riporta l'area della sezione trasversale o la larghezza del contatto a sfioramento o dello strumento stesso.

    • ABS_DISTANCE : (opzionale) riporta la distanza dell'utensile dalla superficie del dispositivo touch.

    • ABS_TILT_X : (opzionale) riporta l'inclinazione dello strumento dalla superficie del dispositivo touch lungo l'asse X.

    • ABS_TILT_Y : (facoltativo) riporta l'inclinazione dello strumento dalla superficie del dispositivo a sfioramento lungo l'asse Y.

    • BTN_TOUCH : (RICHIESTO) Indica se lo strumento sta toccando il dispositivo.

    • BTN_LEFT , BTN_RIGHT , BTN_MIDDLE , BTN_BACK , BTN_SIDE , BTN_FORWARD , BTN_EXTRA , BTN_STYLUS , BTN_STYLUS2 : (facoltativo) riporta gli stati dei pulsanti .

    • BTN_TOOL_FINGER , BTN_TOOL_PEN , BTN_TOOL_RUBBER , BTN_TOOL_BRUSH , BTN_TOOL_PENCIL , BTN_TOOL_AIRBRUSH , BTN_TOOL_MOUSE , BTN_TOOL_LENS , BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP , BTN_TOOL_QUADTAP : (opzionale) riporta il tipo di utensile .

  3. I dispositivi multi-touch utilizzano i seguenti eventi di input Linux:

    • ABS_MT_POSITION_X : (RICHIESTO) Riporta la coordinata X dello strumento.

    • ABS_MT_POSITION_Y : (RICHIESTO) Riporta la coordinata Y dello strumento.

    • ABS_MT_PRESSURE : (opzionale) riporta la pressione fisica applicata sulla punta dell'utensile o l'intensità del segnale del contatto tattile.

    • ABS_MT_TOUCH_MAJOR : (facoltativo) riporta l'area della sezione trasversale del contatto tattile o la lunghezza della dimensione più lunga del contatto tattile.

    • ABS_MT_TOUCH_MINOR : (facoltativo) riporta la lunghezza della dimensione più corta del contatto tattile. Questo asse non deve essere utilizzato se ABS_MT_TOUCH_MAJOR sta segnalando una misurazione dell'area.

    • ABS_MT_WIDTH_MAJOR : (facoltativo) riporta l'area della sezione trasversale dell'utensile stesso o la lunghezza della dimensione più lunga dell'utensile stesso. Questo asse non deve essere utilizzato se le dimensioni dell'utensile stesso sono sconosciute.

    • ABS_MT_WIDTH_MINOR : (facoltativo) riporta la lunghezza della dimensione più corta dell'utensile stesso. Questo asse non deve essere utilizzato se ABS_MT_WIDTH_MAJOR riporta una misurazione dell'area o se le dimensioni dell'utensile stesso sono sconosciute.

    • ABS_MT_ORIENTATION : (opzionale) riporta l'orientamento dello strumento.

    • ABS_MT_DISTANCE : (opzionale) riporta la distanza dell'utensile dalla superficie del dispositivo touch.

    • ABS_MT_TOOL_TYPE : (facoltativo) riporta il tipo di strumento come MT_TOOL_FINGER o MT_TOOL_PEN .

    • ABS_MT_TRACKING_ID : (facoltativo) riporta l'id di tracciamento dello strumento. L'ID di monitoraggio è un numero intero non negativo arbitrario che viene utilizzato per identificare e tracciare ogni strumento in modo indipendente quando sono attivi più strumenti. Ad esempio, quando più dita toccano il dispositivo, a ogni dito deve essere assegnato un ID di tracciamento distinto che viene utilizzato finché il dito rimane in contatto. Gli ID di tracciamento possono essere riutilizzati quando gli strumenti associati si spostano fuori dal raggio di azione.

    • ABS_MT_SLOT : (facoltativo) riporta l'ID slot dello strumento quando si utilizza il protocollo multi-touch Linux 'B'. Per ulteriori dettagli, consultare la documentazione del protocollo multi-touch di Linux.

    • BTN_TOUCH : (RICHIESTO) Indica se lo strumento sta toccando il dispositivo.

    • BTN_LEFT , BTN_RIGHT , BTN_MIDDLE , BTN_BACK , BTN_SIDE , BTN_FORWARD , BTN_EXTRA , BTN_STYLUS , BTN_STYLUS2 : (facoltativo) riporta gli stati dei pulsanti .

    • BTN_TOOL_FINGER , BTN_TOOL_PEN , BTN_TOOL_RUBBER , BTN_TOOL_BRUSH , BTN_TOOL_PENCIL , BTN_TOOL_AIRBRUSH , BTN_TOOL_MOUSE , BTN_TOOL_LENS , BTN_TOOL_DOUBLETAP , BTN_TOOL_TRIPLETAP , BTN_TOOL_QUADTAP : (opzionale) riporta il tipo di utensile .

  4. Se vengono definiti gli assi sia per il protocollo single-touch che multi-touch, verranno utilizzati solo gli assi multi-touch e gli assi single-touch verranno ignorati.

  5. I valori minimo e massimo degli ABS_X , ABS_Y , ABS_MT_POSITION_X e ABS_MT_POSITION_Y definiscono i limiti dell'area attiva del dispositivo in unità di superficie specifiche del dispositivo. Nel caso di un touchscreen, l'area attiva descrive la parte del dispositivo touch che copre effettivamente il display.

    Per un touchscreen, il sistema interpola automaticamente le posizioni di tocco riportate nelle unità di superficie per ottenere posizioni di tocco nei pixel di visualizzazione in base al seguente calcolo:

    displayX = (x - minX) * displayWidth / (maxX - minX + 1)
    displayY = (y - minY) * displayHeight / (maxY - minY + 1)
    

    Un touchscreen può segnalare tocchi al di fuori dell'area attiva segnalata.

    I tocchi avviati al di fuori dell'area attiva non vengono recapitati alle applicazioni ma possono essere utilizzati per le chiavi virtuali.

    I tocchi avviati all'interno dell'area attiva o che entrano ed escono dall'area di visualizzazione vengono recapitati alle applicazioni. Di conseguenza, se un tocco inizia entro i limiti di un'applicazione e quindi si sposta all'esterno dell'area attiva, l'applicazione può ricevere eventi di tocco con coordinate di visualizzazione che sono negative o oltre i limiti del display. Questo è un comportamento previsto.

    Un dispositivo touch non dovrebbe mai bloccare le coordinate touch ai limiti dell'area attiva. Se un tocco esce dall'area attiva, dovrebbe essere segnalato come al di fuori dell'area attiva o non dovrebbe essere segnalato affatto.

    Ad esempio, se il dito dell'utente tocca vicino all'angolo in alto a sinistra del touchscreen, potrebbe indicare una coordinata di (minX, minY). Se il dito continua a spostarsi ulteriormente al di fuori dell'area attiva, il touchscreen dovrebbe iniziare a riportare le coordinate con componenti inferiori a minX e minY, come (minX - 2, minY - 3), oppure dovrebbe interrompere completamente la segnalazione del tocco. In altre parole, il touchscreen non dovrebbe riportare (minX, minY) quando il dito dell'utente sta davvero toccando al di fuori dell'area attiva.

    Il serraggio delle coordinate tattili sul bordo del display crea un limite artificiale artificiale attorno al bordo dello schermo che impedisce al sistema di tracciare in modo uniforme i movimenti che entrano o escono dai limiti dell'area di visualizzazione.

  6. I valori riportati da ABS_PRESSURE o ABS_MT_PRESSURE , se riportati, devono essere diversi da zero quando lo strumento tocca il dispositivo e zero altrimenti per indicare che lo strumento è in bilico.

    La segnalazione delle informazioni sulla pressione è facoltativa ma fortemente consigliata. Le applicazioni possono utilizzare le informazioni sulla pressione per implementare disegni sensibili alla pressione e altri effetti.

  7. I valori riportati da ABS_TOOL_WIDTH , ABS_MT_TOUCH_MAJOR , ABS_MT_TOUCH_MINOR , ABS_MT_WIDTH_MAJOR o ABS_MT_WIDTH_MINOR devono essere diversi da zero quando lo strumento tocca il dispositivo e zero altrimenti, ma ciò non è necessario. Ad esempio, il dispositivo touch potrebbe essere in grado di misurare la dimensione dei contatti touch ma non i contatti touch stilo.

    Le informazioni sulla dimensione dei rapporti sono facoltative ma fortemente consigliate. Le applicazioni possono utilizzare le informazioni sulla pressione per implementare disegni sensibili alle dimensioni e altri effetti.

  8. I valori riportati da ABS_DISTANCE o ABS_MT_DISTANCE dovrebbero avvicinarsi a zero quando lo strumento tocca il dispositivo. La distanza può rimanere diversa da zero anche quando lo strumento è in contatto diretto. I valori esatti riportati dipendono dal modo in cui l'hardware misura la distanza.

    La segnalazione delle informazioni sulla distanza è facoltativa ma consigliata per i dispositivi stilo.

  9. I valori riportati da ABS_TILT_X e ABS_TILT_Y dovrebbero essere zero quando lo strumento è perpendicolare al dispositivo. Un'inclinazione diversa da zero viene considerata come un'indicazione che l'utensile è tenuto in pendenza.

    Si presume che gli angoli di inclinazione lungo gli assi X e Y siano specificati in gradi rispetto alla perpendicolare. Il punto centrale (perfettamente perpendicolare) è dato da (max + min) / 2 per ciascun asse. I valori più piccoli del punto centrale rappresentano un'inclinazione verso l'alto o a sinistra, i valori più grandi del punto centrale rappresentano un'inclinazione verso il basso o verso destra.

    InputReader converte i componenti di inclinazione X e Y in un angolo di inclinazione perpendicolare che varia da 0 a radianti PI / 2 e un angolo di orientamento planare che varia da -PI a radianti PI . Questa rappresentazione risulta in una descrizione dell'orientamento compatibile con ciò che viene utilizzato per descrivere i tocchi delle dita.

    La segnalazione delle informazioni di inclinazione è facoltativa ma consigliata per i dispositivi stilo.

  10. Se il tipo di utensile viene segnalato da ABS_MT_TOOL_TYPE , sostituirà qualsiasi informazione sul tipo di utensile riportata da BTN_TOOL_* . Se non sono disponibili informazioni sul tipo di utensile, per impostazione predefinita il tipo di utensile è MotionEvent.TOOL_TYPE_FINGER .

  11. Viene determinato che uno strumento è attivo in base alle seguenti condizioni:

    • Quando si utilizza il protocollo a tocco singolo, lo strumento è attivo se BTN_TOUCH o BTN_TOOL_* è 1.

      Questa condizione implica che InputReader deve avere almeno alcune informazioni sulla natura dello strumento, sia che si tratti di toccare, o almeno il suo tipo di strumento. Se non sono disponibili informazioni, si presume che lo strumento sia inattivo (fuori portata).

    • Quando si utilizza il protocollo multi-touch 'A', lo strumento è attivo ogni volta che appare nel rapporto di sincronizzazione più recente. Quando lo strumento smette di apparire nei rapporti di sincronizzazione, cessa di esistere.

    • Quando si utilizza il protocollo multi-touch 'B', lo strumento è attivo fintanto che ha uno slot attivo. Quando lo slot ha eliminato, lo strumento cessa di esistere.

  12. Viene determinato che uno strumento è sospeso in base alle seguenti condizioni:

    • Se lo strumento è BTN_TOOL_MOUSE o BTN_TOOL_LENS , lo strumento non è sospeso, anche se una delle seguenti condizioni è vera.

    • Se lo strumento è attivo e il conducente riporta le informazioni sulla pressione e la pressione riportata è zero, lo strumento è sospeso.

    • Se lo strumento è attivo e il driver supporta la BTN_TOUCH codice della chiave e BTN_TOUCH ha un valore pari a zero, allora lo strumento è in bilico.

  13. InputReader supporta sia il protocollo multi-touch 'A' che 'B'. I nuovi driver dovrebbero usare il protocollo 'B' ma funzioneranno entrambi.

  14. A partire da Android Ice Cream Sandwich 4.0, potrebbe essere necessario modificare i driver del touchscreen per rispettare le specifiche del protocollo di input Linux.

    Potrebbero essere necessarie le seguenti modifiche:

    • Quando uno strumento diventa inattivo (il dito va "su"), dovrebbe smettere di apparire nei successivi rapporti di sincronizzazione multi-touch. Quando tutti gli strumenti diventano inattivi (tutte le dita vanno "su"), il driver deve inviare un pacchetto di report di sincronizzazione vuoto, come SYN_MT_REPORT seguito da SYN_REPORT .

      Le versioni precedenti di Android prevedevano che gli eventi "up" fossero segnalati inviando un valore di pressione pari a 0. Il vecchio comportamento era incompatibile con le specifiche del protocollo di input Linux e non è più supportato.

    • Le informazioni sulla pressione fisica o ABS_MT_PRESSURE segnale devono essere riportate utilizzando ABS_MT_PRESSURE .

      Le versioni precedenti di Android hanno recuperato le informazioni sulla pressione da ABS_MT_TOUCH_MAJOR . Il vecchio comportamento era incompatibile con le specifiche del protocollo di input Linux e non è più supportato.

    • Le informazioni sulla dimensione del tocco devono essere riportate usando ABS_MT_TOUCH_MAJOR .

      Le versioni precedenti di Android hanno recuperato le informazioni sulla dimensione da ABS_MT_TOOL_MAJOR . Il vecchio comportamento era incompatibile con le specifiche del protocollo di input Linux e non è più supportato.

    I driver di dispositivo touch non necessitano più di personalizzazioni specifiche per Android. Facendo affidamento sul protocollo di input Linux standard, Android può supportare una più ampia varietà di periferiche touch, come schermi touch multi-touch HID esterni, utilizzando driver non modificati.

Tocca Funzionamento dispositivo

Di seguito è riportato un breve riepilogo del funzionamento del dispositivo touch su Android.

  1. EventHub legge gli eventi non evdev driver evdev .

  2. InputReader gli eventi non InputReader e aggiorna lo stato interno sulla posizione e altre caratteristiche di ogni strumento. Tiene inoltre traccia degli stati dei pulsanti.

  3. Se i pulsanti BACK o FORWARD sono stati premuti o rilasciati, InputReader notifica a InputDispatcher l'evento chiave.

  4. InputReader determina se si è verificata una pressione del tasto virtuale. In tal caso, notifica a InputDispatcher l'evento chiave.

  5. InputReader determina se il tocco è stato avviato entro i limiti del display. In tal caso, notifica a InputDispatcher l'evento touch.

  6. Se non ci sono strumenti toccanti ma esiste almeno uno strumento hovering, InputReader notifica a InputDispatcher l'evento hover.

  7. Se il tipo di dispositivo touch è puntatore , InputReader esegue il rilevamento dei gesti puntatore, sposta il puntatore e gli spot di conseguenza e notifica a InputDispatcher l'evento puntatore.

  8. InputDispatcher utilizza WindowManagerPolicy per determinare se gli eventi devono essere inviati e se devono riattivare il dispositivo. Quindi, InputDispatcher consegna gli eventi alle applicazioni appropriate.

Tocca Configurazione dispositivo

Il comportamento del dispositivo touch è determinato da assi, pulsanti, proprietà di input, configurazione del dispositivo di input, mappa della chiave virtuale e layout della chiave del dispositivo.

Fare riferimento alle seguenti sezioni per maggiori dettagli sui file che partecipano alla configurazione della tastiera:

Proprietà

Il sistema si basa su molte proprietà di configurazione del dispositivo di input per configurare e calibrare il comportamento del dispositivo touch.

Uno dei motivi è che i driver di dispositivo per dispositivi touch spesso riportano le caratteristiche dei tocchi utilizzando unità specifiche del dispositivo.

Ad esempio, molti dispositivi touch misurano l'area di contatto touch utilizzando una scala interna specifica del dispositivo, ad esempio il numero totale di nodi sensore che sono stati attivati ​​dal tocco. Questo valore di dimensioni non elaborate non sarebbe significativo per le applicazioni perché avrebbero bisogno di conoscere le dimensioni fisiche e altre caratteristiche dei nodi del sensore del dispositivo touch.

Il sistema utilizza i parametri di calibrazione codificati nei file di configurazione del dispositivo di input per decodificare, trasformare e normalizzare i valori riportati dal dispositivo touch in una rappresentazione standard più semplice che le applicazioni possono comprendere.

Convenzioni sulla documentazione

A scopo di documentazione, utilizzeremo le seguenti convenzioni per descrivere i valori utilizzati dal sistema durante il processo di calibrazione.

Valori degli assi grezzi

Le espressioni seguenti indicano i valori non EV_ABS riportati dal driver del dispositivo touch come eventi EV_ABS .

raw.x
Il valore dell'asse ABS_X o ABS_MT_POSITION_X .
raw.y
Il valore dell'asse ABS_Y o ABS_MT_POSITION_Y .
raw.pressure
Il valore dell'asse ABS_PRESSURE o ABS_MT_PRESSURE o 0 se non disponibile.
raw.touchMajor
Il valore dell'asse ABS_MT_TOUCH_MAJOR o 0 se non disponibile.
raw.touchMinor
Il valore della ABS_MT_TOUCH_MINOR asse o raw.touchMajor se non disponibile.
raw.toolMajor
Il valore dell'asse ABS_TOOL_WIDTH o ABS_MT_WIDTH_MAJOR o 0 se non disponibile.
raw.toolMinor
Il valore della ABS_MT_WIDTH_MINOR asse o raw.toolMajor se non disponibile.
raw.orientation
Il valore dell'asse ABS_MT_ORIENTATION o 0 se non disponibile.
raw.distance
Il valore dell'asse ABS_DISTANCE o ABS_MT_DISTANCE o 0 se non disponibile.
raw.tiltX
Il valore dell'asse ABS_TILT_X o 0 se non disponibile.
raw.tiltY
Il valore dell'asse ABS_TILT_Y o 0 se non disponibile.

Gamme di assi grezzi

Le espressioni seguenti indicano i limiti dei valori non elaborati. Si ottengono chiamando EVIOCGABS ioctl per ciascun asse.

raw.*.min
Il valore minimo inclusivo dell'asse grezzo.
raw.*.max
Il valore massimo compreso dell'asse grezzo.
raw.*.range
Equivalente a raw.*.max - raw.*.min .
raw.*.fuzz
La precisione dell'asse grezzo. per esempio. fuzz = 1 implica che i valori sono precisi a +/- 1 unità.
raw.width
La larghezza inclusiva dell'area touch, equivalente a raw.x.range + 1 .
raw.height
L'altezza inclusiva dell'area touch, equivalente a raw.y.range + 1 .

Intervalli di uscita

Le seguenti espressioni indicano le caratteristiche del sistema di coordinate di output. Il sistema utilizza l'interpolazione lineare per tradurre le informazioni sulla posizione del tocco dalle unità di superficie utilizzate dal dispositivo touch nelle unità di output che verranno riportate ad applicazioni come i pixel di visualizzazione.

output.width
La larghezza di uscita. Per i touchscreen (associati a un display), questa è la larghezza del display in pixel. Per i touch pad (non associati a un display), la larghezza dell'output è uguale a raw.width , indicando che non verrà eseguita alcuna interpolazione.
output.height
L'altezza di uscita. Per i touchscreen (associati a un display), questa è l'altezza del display in pixel. Per i touch pad (non associati a un display), l'altezza di uscita è uguale a raw.height , indicando che non verrà eseguita alcuna interpolazione.
output.diag
La lunghezza diagonale del sistema di coordinate di output, equivalente a sqrt(output.width ^2 + output.height ^2) .

Configurazione di base

Il mappatore di input touch utilizza molte proprietà di configurazione nel file di configurazione del dispositivo di input per specificare i valori di calibrazione. La tabella seguente descrive alcune proprietà di configurazione per scopi generici. Tutte le altre proprietà sono descritte nelle sezioni seguenti insieme ai campi che vengono utilizzati per calibrare.

touch.deviceType

Definizione: touch.deviceType = touchScreen | touchPad | pointer | default

Specifica il tipo di dispositivo touch.

  • Se il valore è touchScreen , il dispositivo touch è un touchscreen associato a un display.

  • Se il valore è touchPad , il dispositivo touch è un touch pad non associato a un display.

  • Se il valore è pointer , il dispositivo touch è un touch pad non associato a un display e i suoi movimenti vengono utilizzati per i gesti indiretti del puntatore multi-touch .

  • Se il valore è default , il sistema rileva automaticamente il tipo di dispositivo in base all'algoritmo di classificazione.

Fare riferimento alla sezione Classificazione per ulteriori dettagli su come il tipo di dispositivo influenza il comportamento del dispositivo touch.

Prima di Honeycomb, tutti i dispositivi touch erano considerati touchscreen.

touch.orientationAware

Definizione: touch.orientationAware = 0 | 1

Specifica se il dispositivo touch deve reagire per visualizzare le modifiche all'orientamento.

  • Se il valore è 1 , le posizioni di tocco riportate dal dispositivo di tocco vengono ruotate ogni volta che cambia l'orientamento del display.

  • Se il valore è 0 , le posizioni di tocco segnalate dal dispositivo di tocco sono immuni ai cambiamenti di orientamento del display.

Il valore predefinito è 1 se il dispositivo è un touchscreen, 0 altrimenti.

Il sistema distingue tra touchscreen interni ed esterni e display. Un touchscreen interno sensibile all'orientamento viene ruotato in base all'orientamento del display interno. Un touchscreen esterno sensibile all'orientamento viene ruotato in base all'orientamento del display esterno.

La consapevolezza dell'orientamento viene utilizzata per supportare la rotazione dei touchscreen su dispositivi come Nexus One. Ad esempio, quando il dispositivo viene ruotato di 90 gradi in senso orario rispetto al suo orientamento naturale, le posizioni assolute dei tocchi vengono rimappate in modo tale che un tocco nell'angolo in alto a sinistra del sistema di coordinate assolute del touchscreen sia riportato come un tocco in alto a sinistra angolo del sistema di coordinate ruotato del display. Questo viene fatto in modo che i tocchi vengano segnalati con lo stesso sistema di coordinate utilizzato dalle applicazioni per disegnare i loro elementi visivi.

Prima di Honeycomb, si presumeva che tutti i dispositivi touch fossero sensibili all'orientamento.

touch.gestureMode

Definizione: touch.gestureMode = pointer | spots | default

Specifica la modalità di presentazione per i gesti del puntatore. Questa proprietà di configurazione è rilevante solo quando il dispositivo touch è di tipo puntatore .

  • Se il valore è pointer , i gesti del touchpad sono presentati tramite un cursore simile a un puntatore del mouse.

  • Se il valore è spots , i gesti del touchpad sono presentati da un'ancora che rappresenta il centroide del gesto e da una serie di punti circolari che rappresentano la posizione delle singole dita.

Il valore predefinito è pointer quando è impostata la proprietà di input INPUT_PROP_SEMI_MT o spots altrimenti.

Campi X e Y

I campi X e Y forniscono informazioni sulla posizione per il centro dell'area di contatto.

Calcolo

Il calcolo è semplice: le informazioni sulla posizione dal driver touch sono interpolate linearmente sul sistema di coordinate di output.

xScale = output.width / raw.width
yScale = output.height / raw.height

If not orientation aware or screen rotation is 0 degrees:
output.x = (raw.x - raw.x.min) * xScale
output.y = (raw.y - raw.y.min) * yScale
Else If rotation is 90 degrees:
    output.x = (raw.y - raw.y.min) * yScale
    output.y = (raw.x.max - raw.x) * xScale
Else If rotation is 180 degrees:
    output.x = (raw.x.max - raw.x) * xScale
    output.y = (raw.y.max - raw.y) * yScale
Else If rotation is 270 degrees:
    output.x = (raw.y.max - raw.y) * yScale
    output.y = (raw.x - raw.x.min) * xScale
End If

TouchMajor , TouchMinor , ToolMajor , ToolMinor , Campi Size

I campi TouchMajor e TouchMinor descrivono le dimensioni approssimative dell'area di contatto in unità di output (pixel).

I campi ToolMajor e ToolMinor descrivono le dimensioni approssimative dello strumento stesso in unità di output (pixel).

Il campo Size descrive la dimensione normalizzata del tocco rispetto al tocco più grande possibile che il dispositivo touch possa rilevare. La dimensione normalizzata più piccola possibile è 0,0 (nessun contatto o non è misurabile) e la dimensione normalizzata più grande possibile è 1,0 (l'area del sensore è satura).

Quando è possibile misurare sia la lunghezza che la larghezza approssimative, il campo TouchMajor specifica la dimensione più lunga e il campo TouchMinor specifica la dimensione più corta dell'area di contatto. Quando è possibile misurare solo il diametro approssimativo dell'area di contatto, i campi TouchMajor e TouchMinor saranno uguali.

Allo stesso modo, il campo ToolMajor specifica la dimensione più lunga e il campo ToolMinor specifica la dimensione più corta dell'area della sezione trasversale dello strumento.

Se la dimensione del tocco non è disponibile ma è disponibile la dimensione dello strumento, la dimensione dello strumento verrà impostata uguale alla dimensione del tocco. Al contrario, se la dimensione dello strumento non è disponibile ma la dimensione del tocco è disponibile, la dimensione del tocco verrà impostata uguale alla dimensione dello strumento.

I dispositivi touch misurano o segnalano le dimensioni del touch e le dimensioni dello strumento in vari modi. L'attuale implementazione supporta tre diversi tipi di misure: diametro, area e riquadro di delimitazione geometrico in unità di superficie.

touch.size.calibration

Definizione: touch.size.calibration = none | geometric | diameter | area | default

Specifica il tipo di misurazione utilizzata dal driver del tocco per segnalare la dimensione del tocco e la dimensione dello strumento.

  • Se il valore è none , la dimensione è impostata su zero.

  • Se il valore è geometric , si presume che la dimensione sia specificata nelle stesse unità di superficie della posizione, quindi viene ridimensionata nello stesso modo.

  • Se il valore è diameter , si presume che la dimensione sia proporzionale al diametro (larghezza) del tocco o dello strumento.

  • Se il valore è area , si presume che la dimensione sia proporzionale all'area del tocco o dello strumento.

  • Se il valore è default , il sistema utilizza la calibrazione geometric se l'asse raw.touchMajor o raw.toolMajor è disponibile, altrimenti utilizza la calibrazione none .

touch.size.scale

Definizione: touch.size.scale = <a numero in virgola mobile non negativo>

Specifica un fattore di scala costante utilizzato nella calibrazione.

Il valore predefinito è 1.0 .

touch.size.bias

Definizione: touch.size.bias = <a numero in virgola mobile non negativo>

Specifica un valore di polarizzazione costante utilizzato nella calibrazione.

Il valore predefinito è 0.0 .

touch.size.isSummed

Definizione: touch.size.isSummed = 0 | 1

Specifica se la dimensione viene indicata come la somma delle dimensioni di tutti i contatti attivi o se viene segnalata singolarmente per ciascun contatto.

  • Se il valore è 1 , la dimensione segnalata verrà divisa per il numero di contatti prima dell'uso.

  • Se il valore è 0 , le dimensioni riportate verranno utilizzate così come sono.

Il valore predefinito è 0 .

Alcuni dispositivi touch, in particolare i dispositivi "Semi-MT" non sono in grado di distinguere le singole dimensioni di più contatti, quindi segnalano una misurazione delle dimensioni che rappresenta la loro area o larghezza totale. Questa proprietà deve essere impostata su 1 per tali dispositivi. In caso di dubbio, impostare questo valore su 0 .

Calcolo

Il calcolo dei TouchMajor , TouchMinor , ToolMajor , ToolMinor e Size dipende dai parametri di calibrazione specificati.

If raw.touchMajor and raw.toolMajor are available:
    touchMajor = raw.touchMajor
    touchMinor = raw.touchMinor
    toolMajor = raw.toolMajor
    toolMinor = raw.toolMinor
Else If raw.touchMajor is available:
    toolMajor = touchMajor = raw.touchMajor
    toolMinor = touchMinor = raw.touchMinor
Else If raw.toolMajor is available:
    touchMajor = toolMajor = raw.toolMajor
    touchMinor = toolMinor = raw.toolMinor
Else
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
End If

size = avg(touchMajor, touchMinor)

If touch.size.isSummed == 1:
    touchMajor = touchMajor / numberOfActiveContacts
    touchMinor = touchMinor / numberOfActiveContacts
    toolMajor = toolMajor / numberOfActiveContacts
    toolMinor = toolMinor / numberOfActiveContacts
    size = size / numberOfActiveContacts
End If

If touch.size.calibration == "none":
    touchMajor = toolMajor = 0
    touchMinor = toolMinor = 0
    size = 0
Else If touch.size.calibration == "geometric":
    outputScale = average(output.width / raw.width, output.height / raw.height)
    touchMajor = touchMajor * outputScale
    touchMinor = touchMinor * outputScale
    toolMajor = toolMajor * outputScale
    toolMinor = toolMinor * outputScale
Else If touch.size.calibration == "area":
    touchMajor = sqrt(touchMajor)
    touchMinor = touchMajor
    toolMajor = sqrt(toolMajor)
    toolMinor = toolMajor
Else If touch.size.calibration == "diameter":
    touchMinor = touchMajor
    toolMinor = toolMajor
End If

If touchMajor != 0:
    output.touchMajor = touchMajor * touch.size.scale + touch.size.bias
Else
    output.touchMajor = 0
End If

If touchMinor != 0:
    output.touchMinor = touchMinor * touch.size.scale + touch.size.bias
Else
    output.touchMinor = 0
End If

If toolMajor != 0:
    output.toolMajor = toolMajor * touch.size.scale + touch.size.bias
Else
    output.toolMajor = 0
End If

If toolMinor != 0:
    output.toolMinor = toolMinor * touch.size.scale + touch.size.bias
Else
    output.toolMinor = 0
End If

output.size = size

Campo di Pressure

The Pressure field describes the approximate physical pressure applied to the touch device as a normalized value between 0.0 (no touch) and 1.0 (full force).

A zero pressure indicates that the tool is hovering.

touch.pressure.calibration

Definition: touch.pressure.calibration = none | physical | amplitude | default

Specifies the kind of measurement used by the touch driver to report the pressure.

  • If the value is none , the pressure is unknown so it is set to 1.0 when touching and 0.0 when hovering.

  • If the value is physical , the pressure axis is assumed to measure the actual physical intensity of pressure applied to the touch pad.

  • If the value is amplitude , the pressure axis is assumed to measure the signal amplitude, which is related to the size of the contact and the pressure applied.

  • If the value is default , the system uses the physical calibration if the pressure axis available, otherwise uses none .

touch.pressure.scale

Definition: touch.pressure.scale = <a non-negative floating point number>

Specifies a constant scale factor used in the calibration.

The default value is 1.0 / raw.pressure.max .

Calculation

The calculation of the Pressure field depends on the specified calibration parameters.

If touch.pressure.calibration == "physical" or "amplitude":
    output.pressure = raw.pressure * touch.pressure.scale
Else
    If hovering:
        output.pressure = 0
    Else
        output.pressure = 1
    End If
End If

Orientation and Tilt Fields

The Orientation field describes the orientation of the touch and tool as an angular measurement. An orientation of 0 indicates that the major axis is oriented vertically, -PI/2 indicates that the major axis is oriented to the left, PI/2 indicates that the major axis is oriented to the right. When a stylus tool is present, the orientation range may be described in a full circle range from -PI or PI .

The Tilt field describes the inclination of the tool as an angular measurement. A tilt of 0 indicates that the tool is perpendicular to the surface. A tilt of PI/2 indicates that the tool is flat on the surface.

touch.orientation.calibration

Definition: touch.orientation.calibration = none | interpolated | vector | default

Specifies the kind of measurement used by the touch driver to report the orientation.

  • If the value is none , the orientation is unknown so it is set to 0.

  • If the value is interpolated , the orientation is linearly interpolated such that a raw value of raw.orientation.min maps to -PI/2 and a raw value of raw.orientation.max maps to PI/2 . The center value of (raw.orientation.min + raw.orientation.max) / 2 maps to 0 .

  • If the value is vector , the orientation is interpreted as a packed vector consisiting of two signed 4-bit fields. This representation is used on Atmel Object Based Protocol parts. When decoded, the vector yields an orientation angle and confidence magnitude. The confidence magnitude is used to scale the size information, unless it is geometric.

  • If the value is default , the system uses the interpolated calibration if the orientation axis available, otherwise uses none .

Calculation

The calculation of the Orientation and Tilt fields depends on the specified calibration parameters and available input.

If touch.tiltX and touch.tiltY are available:
    tiltXCenter = average(raw.tiltX.min, raw.tiltX.max)
    tiltYCenter = average(raw.tiltY.min, raw.tiltY.max)
    tiltXAngle = (raw.tiltX - tiltXCenter) * PI / 180
    tiltYAngle = (raw.tiltY - tiltYCenter) * PI / 180
    output.orientation = atan2(-sin(tiltXAngle), sinf(tiltYAngle))
    output.tilt = acos(cos(tiltXAngle) * cos(tiltYAngle))
Else If touch.orientation.calibration == "interpolated":
    center = average(raw.orientation.min, raw.orientation.max)
    output.orientation = PI / (raw.orientation.max - raw.orientation.min)
    output.tilt = 0
Else If touch.orientation.calibration == "vector":
    c1 = (raw.orientation & 0xF0) >> 4
    c2 = raw.orientation & 0x0F

    If c1 != 0 or c2 != 0:
        If c1 >= 8 Then c1 = c1 - 16
        If c2 >= 8 Then c2 = c2 - 16
        angle = atan2(c1, c2) / 2
        confidence = sqrt(c1*c1 + c2*c2)

        output.orientation = angle

        If touch.size.calibration == "diameter" or "area":
            scale = 1.0 + confidence / 16
            output.touchMajor *= scale
            output.touchMinor /= scale
            output.toolMajor *= scale
            output.toolMinor /= scale
        End If
    Else
        output.orientation = 0
    End If
    output.tilt = 0
Else
    output.orientation = 0
    output.tilt = 0
End If

If orientation aware:
    If screen rotation is 90 degrees:
        output.orientation = output.orientation - PI / 2
    Else If screen rotation is 270 degrees:
        output.orientation = output.orientation + PI / 2
    End If
End If

Distance Field

The Distance field describes the distance between the tool and the touch device surface. A value of 0.0 indicates direct contact and larger values indicate increasing distance from the surface.

touch.distance.calibration

Definition: touch.distance.calibration = none | scaled | default

Specifies the kind of measurement used by the touch driver to report the distance.

  • If the value is none , the distance is unknown so it is set to 0.

  • If the value is scaled , the reported distance is multiplied by a constant scale factor.

  • If the value is default , the system uses the scaled calibration if the distance axis available, otherwise uses none .

touch.distance.scale

Definition: touch.distance.scale = <a non-negative floating point number>

Specifies a constant scale factor used in the calibration.

The default value is 1.0 .

Calculation

The calculation of the Distance field depends on the specified calibration parameters.

If touch.distance.calibration == "scaled":
    output.distance = raw.distance * touch.distance.scale
Else
    output.distance = 0
End If

Example

# Input device configuration file for a touch screen that supports pressure,
# size and orientation.  The pressure and size scale factors were obtained
# by measuring the characteristics of the device itself and deriving
# useful approximations based on the resolution of the touch sensor and the
# display.
#
# Note that these parameters are specific to a particular device model.
# Different parameters will need to be used for other devices.

# Basic Parameters
touch.deviceType = touchScreen
touch.orientationAware = 1

# Size
# Based on empirical measurements, we estimate the size of the contact
# using size = sqrt(area) * 28 + 0.
touch.size.calibration = area
touch.size.scale = 28
touch.size.bias = 0
touch.size.isSummed = 0

# Pressure
# Driver reports signal strength as pressure.
#
# A normal index finger touch typically registers about 80 signal strength
# units although we don't expect these values to be accurate.
touch.pressure.calibration = amplitude
touch.pressure.scale = 0.0125

# Orientation
touch.orientation.calibration = vector

Compatibility Notes

The configuration properties for touch devices changed significantly in Android Ice Cream Sandwich 4.0. All input device configuration files for touch devices must be updated to use the new configuration properties.

Older touch device drivers may also need to be updated.

Virtual Key Map Files

Touch devices are often used to implement virtual keys.

There are several ways of doing this, depending on the capabilities of the touch controller. Some touch controllers can be directly configured to implement soft keys by setting firmware registers. Other times it is desirable to perform the mapping from touch coordinates to key codes in software.

When virtual keys are implemented in software, the kernel must export a virtual key map file called virtualkeys.<devicename> as a board property. For example, if the touch screen device drivers reports its name as "touchyfeely" then the virtual key map file must have the path /sys/board_properties/virtualkeys.touchyfeely .

A virtual key map file describes the coordinates and Linux key codes of virtual keys on the touch screen.

In addition to the virtual key map file, there must be a corresponding key layout file and key character map file to map the Linux key codes to Android key codes and to specify the type of the keyboard device (usually SPECIAL_FUNCTION ).

Syntax

A virtual key map file is a plain text file consisting of a sequence of virtual key layout descriptions either separated by newlines or by colons.

Comment lines begin with '#' and continue to the end of the line.

Each virtual key is described by 6 colon-delimited components:

  • 0x01 : A version code. Must always be 0x01 .
  • <Linux key code>: The Linux key code of the virtual key.
  • <centerX>: The X pixel coordinate of the center of the virtual key.
  • <centerY>: The Y pixel coordinate of the center of the virtual key.
  • <width>: The width of the virtual key in pixels.
  • <height>: The height of the virtual key in pixels.

All coordinates and sizes are specified in terms of the display coordinate system.

Here is a virtual key map file all written on one line.

# All on one line
0x01:158:55:835:90:55:0x01:139:172:835:125:55:0x01:102:298:835:115:55:0x01:217:412:835:95:55

The same virtual key map file can also be written on multiple lines.

# One key per line
0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

In the above example, the touch screen has a resolution of 480x800. Accordingly, all of the virtual keys have a <centerY> coordinate of 835, which is a little bit below the visible area of the touch screen.

The first key has a Linux scan code of 158 ( KEY_BACK ), centerX of 55 , centerY of 835 , width of 90 and height of 55 .

Example

Virtual key map file: /sys/board_properties/virtualkeys.touchyfeely .

0x01:158:55:835:90:55
0x01:139:172:835:125:55
0x01:102:298:835:115:55
0x01:217:412:835:95:55

Key layout file: /system/usr/keylayout/touchyfeely.kl .

key 158 BACK
key 139 MENU
key 172 HOME
key 217 SEARCH

Key character map file: /system/usr/keychars/touchyfeely.kcm .

type SPECIAL_FUNCTION

Indirect Multi-touch Pointer Gestures

In pointer mode, the system interprets the following gestures:

  1. Single finger tap: click.

  2. Single finger motion: move the pointer.

  3. Single finger motion plus button presses: drag the pointer.

  4. Two finger motion both fingers moving in the same direction: drag the area under the pointer in that direction. The pointer itself does not move.

  5. Two finger motion both fingers moving towards each other or apart in different directions: pan/scale/rotate the area surrounding the pointer. The pointer itself does not move.

  6. Multiple finger motion: freeform gesture.

Further Reading

  1. Linux multi-touch protocol
  2. ENAC list of available multitouch devices on Linux