Touchscreen ed eventi Touch

10 settembre 2014

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_width="match_parent"
    android:layout_height="match_parent">
    <TextView 
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          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.

Tutte le lezioni

1 ... 40 41 42 ... 85

Se vuoi aggiornamenti su Touchscreen ed eventi Touch inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Touchscreen ed eventi Touch

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