Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 42 di 97
  • livello avanzato
Indice lezioni

Touchscreen ed eventi Touch

Sfruttare gli eventi Touch per gestire le interazione con il touchscreen.
Sfruttare gli eventi Touch per gestire le interazione con il touchscreen.
Link copiato negli appunti

Pensare un dispositivo Android senza touchscreen ormai è impossibile. La facoltà di un display di riconoscere il movimento di uno o più dita dell'utente su
di sé è di fondamentale importanza. Ciò ha rappresentato una svolta generazionale nei device facilitando il pensionamento delle tastiere hardware e
permettendo l'avvento di quelle software che noi tutti conosciamo.

In questo capitolo si inizierà a conoscere l'utilizzo del touch in un'app Android e le informazioni fondamentali che tale evento fornisce. Infine, con un
esempio, se ne mostrerà un possibile uso.

Abbiamo imparato a definire un listener ogni volta che la nostra app è in attesa di qualcosa. La gestione del touch non fa differenza. Un metodo onTouchEvent riceverà le informazioni relative al singolo evento in un oggetto MotionEvent e predisporrà una reazione.

A dimostrazione della fondamentale importanza che la gestione del touchscreen riveste non sarà necessario implementare alcuna interfaccia – come ad esempio
si faceva con SensorEventListener per i sensori – ma il metodo onTouchEvent è "di serie" su qualsiasi View e sulle Activity.

Un oggetto MotionEvent contiene molte informazioni, ma quelle più "eloquenti" per il programmatore sono:

  • le coordinate del display in cui è avvenuto l'evento touch;
  • la tipologia dell'evento (i più comuni: ACTION_DOWN, generato quando il dito si è posato sullo schermo, ACTION_MOVE, se il dito si è mosso senza staccarsi dallo schermo, ed ACTION_UP nel caso in cui il dito ha lasciato la superficie del display).

L'esempio

In questa dimostrazione riconosceremo mediante touch un click sullo schermo del dispositivo sfruttando il metodo onTouchEvent dell'Activity. Per fare ciò
cercheremo una certa sequenzialità tra un evento ACTION_DOWN ed uno ACTION_UP. Con l'occasione, rilevando i tempi delle due fasi, si calcolerà
approssimativamente quanti secondi è durato il click.

Il risultato finale è visibile nella figura in cui si vede un Toast che fornisce le informazioni raccolte con il piccolo esperimento.

Layout semplicissimo (file: res/layout/activity_main.xml):

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<TextView
android:layout_
android:layout_
android:layout_centerInParent="true"
android:textStyle="bold"
android:textSize="20dp"
android:text="Tieni premuto il dito sul\n display alcuni secondi"/>
</RelativeLayout>

Il codice dell'activity concentra le sue peculiarità in onTouchEvent:

public class MainActivity extends Activity
{
private long inizio=0;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onTouchEvent(MotionEvent event)
{
float eventX = event.getX();
float eventY = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:
inizio=System.currentTimeMillis();
break;
case MotionEvent.ACTION_UP:
String posizione="("+Math.round(eventX)+","+Math.round(eventY)+")";
long diffInSec=(System.currentTimeMillis()-inizio)/1000;
Toast.makeText(this, "Click durato "+diffInSec+" secondi in posizione "+posizione, Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
}

I metodi di MotionEvent utilizzati sono:

  • getX() e getY(): forniscono, rispettivamente, ascissa e ordinata della posizione del display in cui si è verificato l'evento;
  • getAction(): restituisce una costante intera che permette di riconoscere il tipo di evento.

In caso di ACTION_DOWN viene salvato in una variabile intera dell'Activity l'informazione temporale in millisecondi. In ACTION_UP si farà la differenza tra
l'attuale informazione oraria e quella salvata al momento di toccare lo schermo.

Ti consigliamo anche