DevCorner620

DevCorner: stabiliamo in che direzione ci muoviamo grazie all’accelerometro

Giuseppe Tripodi

Il tutorial di questo martedì continua sulla scia di quanto iniziato due settimane fa e, anche questa volta, vede l’accelerometro come protagonista. In particolare, oggi capiamo meglio come poterlo utilizzare nel caso di voler realizzare dei giochi (o altro) che interpretano le direzioni dei nostri movimenti.

Per quanto riguarda l’interfaccia grafica, visto che si tratta di un software d’esempio mettiamo solo una TextView che ha come ID direzione.

Passiamo quindi subito al vivo dell’azione e nell’unico file java che ci troviamo (MainActivity) dichiariamo un oggetto SensorManager, un Sensor, e una TextView. Come la volta scorsa, inizializziamo il tutto nell’OnCreate ma, a differenza della volta precedente, nel metodo registerListener passiamo SensorManager.SENSOR_DELAY_GAME per avere una maggiore sensibilità.

	private SensorManager sensorManager;
	private Sensor accelerometro;
	TextView tvDirezione;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
		accelerometro = sensorManager
				.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
		sensorManager.registerListener(this, accelerometro,
				SensorManager.SENSOR_DELAY_GAME);
		tvDirezione = (TextView) findViewById(R.id.direzione);
	}

Adesso, la parte principale del codice va scritta nel metodo onSensorChanged: dichiariamo tre valori float ed assegniamo ad ognuno di essi il corrispettivo valore dell’asse X, Y o Z. Fatto questo, facciamo un controllo se il valore di ogni asse è maggiore di 2 (cifra assolutamente arbitraria per avere un’indice approssimativo), minore di -2 o compresa tra -2 e 2. Per ognuno di questi casi, a seconda dell’asse, stabiliamo se il dispositivo si sta muovendo Avanti, Indietro, a Destra, a Sinistra, in Alto o in Basso: il valore verrà stampato e loggato. Il codice finale, quindi, sarà qualcosa del genere.

@Override
	public void onSensorChanged(SensorEvent event) {
		// TODO Auto-generated method stub

		float x = event.values[0];
		float y = event.values[1];
		float z = event.values[2];
		
		
	
        String stampa = "Mi stai spostando verso: ";
        
        if(x>2){
        	Log.d("Direzione 1", "Sinistra");
        	stampa+= "Sinistra \n";
        }
        else if(x2){
        	Log.d("Direzione 2", "Alto");
        	stampa+= "Alto \n";
          }
        else if (y2){
        	Log.d("Direzione 3", "Avanti");
        	stampa+= "Avanti \n";
          }
        else if (z

Prima di salutarvi e lasciarvi immaginare come creare un gioco che monitori le vostre abilità di salto e quant'altro, vi ricordiamo ancora una volta che per qualsiasi dubbio, nonché per trovare i codici sorgente delle applicazioni proposte, potete fare riferimento al nostro forum.

Via: DevCorner