Gestire il multi-touch in una view

In questo articolo trovi un esempio completo che mostra come

  • estendere una view per disegnare, in questo caso, un cerchio nel punto in cui lo schermo è toccato
  • implementare un listener su una view per gestire il multi-touch


In questa app lo schermo è diviso in due parti:

  • un parte superiore che mostra i dati relativi al touch:
    1. pointer index: indice di un array dove sono salvate le informazioni del touch
    2. pointer ID: identificativo unico e costante nel tempo di un touch
    3. coordinata x del centro
    4. coordinata y del centro
    5. action: azione relativa al touch
  • una parte inferiore contenente la view ed eventualmente un cerchio rosso per il primo touch e un cerchio verde per il secondo touch

I seguenti punti mostrano i file più importanti di questa app:

  1. MainActivity.java, l’attività principale

    dalla riga 51 implemento la classe onTouchListener per gestire gli eventi relativi alle seguenti action:

    • ACTION_DOWN: primo tocco
    • ACTION_MOVE: spostamento dei tocchi
    • ACTION_CANCEL: interruzione dell’evento (ad esempio spegnimento dello schermo)
    • ACTION_UP: rilascio dell’ultimo tocco
    • ACTION_POINTER_DOWN: un tocco successivo al primo
    • ACTION_POINTER_UP: rilascio di un tocco con almeno un tocco ancora presente

    osserva come ottengo i dati dell’evento:

    • action = event.getActionMasked()
    • pointer index = event.getActionIndex() o con un ciclo da 0 a event.getPointerCount() per le action (ACTION_MOVE e ACTION_CANCEL) che possono riferirsi a più tocchi contemporaneamente
    • pointer id = event.getPointerId([pointer index])
    • x = event.getX([pointer index])
    • y = event.getY([pointer index])

    successivamente richiamo i metodi privati setTextViews(), moveCircle() e deleteCircle() ai quali non è mai passato il pointer index ma il pointer id perché è il pointer id che identifica il tocco
    alla riga 187 il metodo invalidate() chiama il metodo onDraw() della classe TouchView che ridisegna la view

  2. res/layout/activity_main.xml, il layout

  3. TouchView.java

    questa classe estende la classe View e sovrascrive due metodi

    • onDraw(): ridisegna la view, lo sfondo bianco e due cerchi
    • onMeasure(): dimensiona la view, non è molto importante in questo esempio

  4. Circle.java

Lancia l’app e tocca lo schermo:
circleview

Puoi scaricare il progetto qui.

Una risposta a “Gestire il multi-touch in una view”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.