多语言展示
当前在线:953今日阅读:26今日分享:39

【Android】传感器实现指南针

水平传感器传回来的第一个参数值就是代表手机绕Z轴转过的角度,也就是手机顶部与正北的角度,也就是手机顶部与正北的夹角。通过水平传感器检查夹角可以实现指南针。
工具/原料

编译工具:Eclipse

方法/步骤
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(); }

注意事项
1

本步骤需要一定代码基础

2

程序代码以代码片段的形式展示

推荐信息