The following code shows how to Listen to sensor change event.
Main layout activity_main.xml file
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="0,1,2"> <TableRow android:layout_weight="1"> <View android:id="@+id/top" android:layout_column="1" /> </TableRow> <TableRow android:layout_weight="1"> <View android:id="@+id/left" android:layout_column="0" /> <View android:id="@+id/right" android:layout_column="2" /> </TableRow> <TableRow android:layout_weight="1"> <View android:id="@+id/bottom" android:layout_column="1" /> </TableRow> </TableLayout> <TextView android:id="@+id/values" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout>
Java code
package com.java2s.myapplication3.app; // w w w .ja v a 2 s. c o m import android.app.Activity; import android.graphics.Color; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.view.View; import android.widget.TextView; public class MainActivity extends Activity implements SensorEventListener { private SensorManager mSensorManager; private Sensor mAccelerometer; private TextView valueView; private View mTop, mBottom, mLeft, mRight; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); valueView = (TextView)findViewById(R.id.values); mTop = findViewById(R.id.top); mBottom = findViewById(R.id.bottom); mLeft = findViewById(R.id.left); mRight = findViewById(R.id.right); } protected void onResume() { super.onResume(); mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_UI); } protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { final float[] values = event.values; float x = values[0]/10; float y = values[1]/10; int scaleFactor; if(x > 0) { scaleFactor = (int)Math.min(x*255, 255); mRight.setBackgroundColor(Color.TRANSPARENT); mLeft.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0)); } else { scaleFactor = (int)Math.min(Math.abs(x)*255, 255); mRight.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0)); mLeft.setBackgroundColor(Color.TRANSPARENT); } if(y > 0) { scaleFactor = (int)Math.min(y*255, 255); mTop.setBackgroundColor(Color.TRANSPARENT); mBottom.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0)); } else { scaleFactor = (int)Math.min(Math.abs(y)*255, 255); mTop.setBackgroundColor(Color.argb(scaleFactor, 255, 0, 0)); mBottom.setBackgroundColor(Color.TRANSPARENT); } //Display the raw values valueView.setText(String.format("X: %1$1.2f, Y: %2$1.2f, Z: %3$1.2f", values[0], values[1], values[2])); } }