<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#fff" > <ImageView android:id="@+id/znzImage" android:layout_width="150dip" android:layout_height="150dip" android:scaleType="fitCenter" android:src="@drawable/znz"/> </LinearLayout>
package org.crazyit.sensor; //import org.openintents.sensorsimulator.hardware.Sensor; //import org.openintents.sensorsimulator.hardware.SensorEvent; //import org.openintents.sensorsimulator.hardware.SensorEventListener; //import org.openintents.sensorsimulator.hardware.SensorManagerSimulator; import android.app.Activity; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.util.Log; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; /** * Description: * <br/>site: <a href="http://www.crazyit.org">crazyit.org</a> * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee0 * <br/>This program is protected by copyright laws. * <br/>Program Name: * <br/>Date: * @author Yeeku.H.Lee kongyeeku@163.com * @version 1.0 */ public class Compass extends Activity implements SensorEventListener { // 定义显示指南针的图片 ImageView znzImage; // 记录指南针图片转过的角度 float currentDegree = 0f; // 定义模拟器的Sensor管理器 // private SensorManagerSimulator mSensorManager; // 定义真机的Sensor管理器 SensorManager mSensorManager; @Override public void onCreate(Bundle savedInstanceState) { Log.i("hyz", "Compass->onCreate()"); super.onCreate(savedInstanceState); setContentView(R.layout.main); // 获取界面中显示指南针的图片 znzImage = (ImageView) findViewById(R.id.znzImage); // 获取真机的传感器管理服务 mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); // // 获取传感器模拟器的传感器管理服务 // mSensorManager = SensorManagerSimulator.getSystemService(this, // SENSOR_SERVICE); // // 连接传感器模拟器 // mSensorManager.connectSimulator(); } @Override protected void onResume() { Log.i("hyz", "Compass->onResume()"); super.onResume(); // 为系统的方向传感器注册监听器 mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); } @Override protected void onPause() { Log.i("hyz", "Compass->onPause()"); // 取消注册 mSensorManager.unregisterListener(this); super.onPause(); } @Override protected void onStop() { Log.i("hyz", "Compass->onStop()"); // 取消注册 mSensorManager.unregisterListener(this); super.onStop(); } @Override public void onSensorChanged(SensorEvent event) { //Log.i("hyz", "Compass->onSensorChanged()"); // 真机上获取触发event的传感器类型 int sensorType = event.sensor.getType(); // // 模拟器上获取触发event的传感器类型 // int sensorType = event.type; 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(0); // 运行动画 znzImage.startAnimation(ra); currentDegree = -degree; break; } } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { Log.i("hyz", "Compass->onAccuracyChanged()"); } }