概述
現(xiàn)在一般android手機(jī)里都有 磁場(chǎng)傳感器,它能檢測(cè)到方向。我們做個(gè)指南針應(yīng)用玩玩。

思路
1.獲得傳感器服務(wù)
2.注冊(cè)指定類型的傳感器的監(jiān)聽(tīng)事件
3.在監(jiān)聽(tīng)事件獲得消息后,調(diào)整我們?cè)噲D的指南針(一般就是個(gè)圖片)的方向。
實(shí)現(xiàn)
1.獲得 SensorManager。
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
2.注冊(cè)監(jiān)聽(tīng)器
mSensorManager.registerListener(mSensorEventListener,
mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
3.實(shí)現(xiàn)監(jiān)聽(tīng)器
SensorEventListener mSensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// 獲取繞Z軸轉(zhuǎn)過(guò)的角度
float degree = event.values[0];
// 創(chuàng)建旋轉(zhuǎn)動(dòng)畫(huà)(反向轉(zhuǎn)過(guò)degree度)
RotateAnimation ra = new RotateAnimation(currentDegree, -degree,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF, 0.5f);
// 設(shè)置動(dòng)畫(huà)的持續(xù)時(shí)間
ra.setDuration(200);
// 設(shè)置動(dòng)畫(huà)結(jié)束后的保留狀態(tài)
ra.setFillAfter(true);
// 啟動(dòng)動(dòng)畫(huà)
image.startAnimation(ra);
currentDegree = -degree;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
4.釋放資源,取消注冊(cè)監(jiān)聽(tīng)器
// 取消注冊(cè)
mSensorManager.unregisterListener(mSensorEventListener);
參考:
http://blog.csdn.net/u010142437/article/details/9387181
http://blog.csdn.net/wang6279026/article/details/8231755