【Android】传感器实现指南针
1、指南针代码的例子项目结构

2、布局效果
(这里附上了指南针的图)


3、布局的xml代码

4、实现代码结构图

5、// 定义显示指南针的图片
ImageView znzImage;
// 记录指南针图片转过的角度
float currentDegree = 0f;
// 定义Sensor管理器
SensorManager mSensorManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 获取界面中显示指南针的图片
znzImage = (ImageView) findViewById(R.id.znzImage);
// 获取传感器管理服务
mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); }

6、传感器代码部分
@Override
public void onSensorChanged(SensorEvent event) {
// 获取触发event的传感器类型
int sensorType = event.sensor.getType();
switch (sensorType) {
case Sensor.TYPE_ORIENTATION: // 获取绕Z轴转过的角度。
float degree = event.values[0]; // 创建旋转动画(反向转过degree度)
RotateAnimation ra = new RotateAnimation(currentDegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 设置动画的持续时间 ra.setDuration(200); // 运行动画
znzImage.startAnimation(ra); currentDegree = -degree;
break;
} }

7、传感器在几个生命周期的处理方法
@Override
protected void onResume() {
super.onResume();
// 为系统的方向传感器注册监听器
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME);
}
@Override protected void onPause() {
// 取消注册
mSensorManager.unregisterListener(this); super.onPause();
}
@Override protected void onStop() {
// 取消注册
mSensorManager.unregisterListener(this); super.onStop();
}
