Android笔记(十九)制作一个简易的指南针
生活随笔
收集整理的這篇文章主要介紹了
Android笔记(十九)制作一个简易的指南针
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、獲取方向的方法
Android 獲取手機旋轉的方向和角度是通過加速度傳感器和地磁傳感器共同計算得出的,這是 Android 目前推薦使用的方式。正常情況下,手機的頭部如果是正北方向,那么它圍繞Z軸的旋轉方向數值會是0。我們就可以根據手機圍繞Z軸的旋轉方向的數值來計算方位。
RotateAnimation旋轉動畫效果
RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
第一個參數:旋轉的開始角度
第二個參數:旋轉的結束角度
第三個參數:X軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
第四個參數:X坐標的伸縮值。
第五個參數:Y軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
第六個參數:Y坐標的伸縮值。
二、1.建立布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><ImageView android:id="@+id/circle"android:layout_width="250dp"android:layout_height="250dp"android:layout_centerInParent="true"android:src="@drawable/circle" /><ImageView android:id="@+id/arrow"android:layout_width="60dp"android:layout_height="110dp"android:layout_centerInParent="true"android:src="@drawable/arrow" /></RelativeLayout>2.MainActivity
public class MainActivity extends ActionBarActivity {private SensorManager sensorManager;private ImageView circle;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);circle = (ImageView) findViewById(R.id.circle);sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);Sensor magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);Sensor accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);sensorManager.registerListener(listener, magnetic,SensorManager.SENSOR_DELAY_GAME);sensorManager.registerListener(listener, accelerometer,SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();if (sensorManager != null) {sensorManager.unregisterListener(listener);}}private SensorEventListener listener = new SensorEventListener() {float[] accelerometerValues = new float[3];float[] magneticValues = new float[3];private float lastDegree;@Overridepublic void onSensorChanged(SensorEvent event) {if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {accelerometerValues = event.values.clone();} else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {magneticValues = event.values.clone();}float[] R = new float[9];float[] values = new float[3];SensorManager.getRotationMatrix(R, null, accelerometerValues,magneticValues);SensorManager.getOrientation(R, values);// 將計算出的旋轉角度取反,用于旋轉指南針背景圖float rotateDegree = -(float) Math.toDegrees(values[0]);if (Math.abs(rotateDegree - lastDegree) > 1) {RotateAnimation animation = new RotateAnimation(lastDegree,rotateDegree, Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);animation.setFillAfter(true);// 動畫執行完后是否停留在執行完的狀態circle.startAnimation(animation);lastDegree = rotateDegree;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {// TODO Auto-generated method stub}};三、效果如圖
完整項目代碼和apk安裝文件參考如下:
http://download.csdn.net/detail/tomi_en/9082505
總結
以上是生活随笔為你收集整理的Android笔记(十九)制作一个简易的指南针的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PC介绍之电脑组成
- 下一篇: 1024分辨率《圣徒/天神魔煞/猎魔教士