<?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()");
}
}