Android ApiDemos示例解析(79):Graphics->SensorTest

本例SensorTest和例子Android ApiDemos示例解析(61):Graphics->Compass在绘图方面的介绍基本一样,我也不知道为什么Google 再把这个SensorTest还是归在Graphics 目录下。

本例着重点是介绍使用SensorManager.SENSOR_ACCELEROMETER 如何来判断设备的移动方向:使用Log的方式而非图形的方式显示结果所以运行本例显示的箭头始终向上

本例归在Hardware比较合理。如何使用SENSOR_ACCELEROMETER判断设备移动方向的代码如下:

public void onSensorChanged(int sensor, float[] values) {
 boolean show = false;
 float[] diff = new float[3];
 
 for (int i = 0; i < 3; i++) {
 diff[i] = Math.round(mScale[i]
 * (values[i] - mPrev[i]) * 0.45f);
 if (Math.abs(diff[i]) > 0) {
 show = true;
 }
 mPrev[i] = values[i];
 }
 
 ...
 
 long now = android.os.SystemClock.uptimeMillis();
 if (now - mLastGestureTime > 1000) {
 mLastGestureTime = 0;
 
 float x = diff[0];
 float y = diff[1];
 boolean gestX = Math.abs(x) > 3;
 boolean gestY = Math.abs(y) > 3;
 
 if ((gestX || gestY) && !(gestX && gestY)) {
 if (gestX) {
 if (x < 0) {
 android.util.Log.e("test",
 "<<<<<<<< LEFT <<<<<<<<<<<<");
 } else {
 android.util.Log.e("test",
 ">>>>>>>>> RITE >>>>>>>>>>>");
 }
 } else {
 if (y < -2) {
 android.util.Log.e("test",
 "<<<<<<<< UP <<<<<<<<<<<<");
 } else {
 android.util.Log.e("test",
 ">>>>>>>>> DOWN >>>>>>>>>>>");
 }
 }
 mLastGestureTime = now;
 }
 }
}

如果想在设备移动时,屏幕上箭头的指向随着变化,可以参见Compass的例子,加上:

mValues = values;
if (mView != null) {
 mView.invalidate();
}


Android ApiDemos示例解析(79):Graphics->SensorTest


你可能感兴趣的:(graphics)