<?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 [email protected]
* @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()");
}
}