Android指南针程序的实现
生活随笔
收集整理的這篇文章主要介紹了
Android指南针程序的实现
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在Android中,指南針功能是依靠Android手機內(nèi)置的方向傳感器實現(xiàn)的。并且Android系統(tǒng)也已經(jīng)封裝好了針對這些傳感器的所需操作,不用我們從底層去了解,因此編程變得相當簡單。下面介紹如何實現(xiàn)指南針功能。
1、新建一個Activity,使其實現(xiàn)SensorEventListener接口。如下所示:
public class compassActivity extends Activity implements SensorEventListener { @Overridepublic void onAccuracyChanged(Sensor arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent arg0) { } }可以看到,SensorEventListener接口提供兩個重載方法,在這里我們只去復寫onSensorChanged方法,當傳感器的值發(fā)生變化時會觸發(fā)這個方法。我們就在這個方法中改變指南針的方向。
2、在介紹業(yè)務代碼之前,先來看一下Activity的布局:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><EditTextandroid:id="@+id/orientationEditText"android:layout_margin="10dp"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="orientation"/><ImageViewandroid:id="@+id/compassImage"android:layout_margin="10dp"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_below="@id/orientationEditText"android:scaleType="fitCenter"android:src="@drawable/compass"/> </RelativeLayout>其中EditText用來顯示傳感器角度變化值,ImageView則直觀的顯示這種變化。
2、業(yè)務實現(xiàn):
package com.gan.compass;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.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.EditText; import android.widget.ImageView;public class compassActivity extends Activity implements SensorEventListener {private EditText orientationEditText;private SensorManager SM;private ImageView compassImage;private float currentDegree = 0f;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_compass);orientationEditText = (EditText) findViewById(R.id.orientationEditText);compassImage = (ImageView) findViewById(R.id.compassImage);}@SuppressWarnings("deprecation")@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();SM = (SensorManager) getSystemService(SENSOR_SERVICE);SM.registerListener(compassActivity.this,SM.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onPause() {SM.unregisterListener(compassActivity.this);super.onPause();}@Overrideprotected void onStop() {SM.unregisterListener(compassActivity.this);super.onStop();}@Overridepublic void onAccuracyChanged(Sensor arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onSensorChanged(SensorEvent arg0) {int sensorType = arg0.sensor.getType();switch (sensorType) {case Sensor.TYPE_ORIENTATION:StringBuilder sb = new StringBuilder();sb.append("繞Z軸轉過的角度:");sb.append(arg0.values[0]);sb.append("\n繞X軸轉過的角度:");sb.append(arg0.values[1]);sb.append("\n繞Y軸轉過的角度:");sb.append(arg0.values[2]);orientationEditText.setText(sb.toString());//獲取手機繞Z軸轉過的角度float degree = arg0.values[0];//創(chuàng)建旋轉動畫,反向轉過degree度RotateAnimation ra = new RotateAnimation(currentDegree,-degree,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//設置動畫的持續(xù)時間ra.setDuration(200);//運行動畫compassImage.startAnimation(ra);currentDegree = -degree;break;}} }以上代碼顯示,當傳感器的值發(fā)生變化時,我們就讓ImageView中的圖片發(fā)生相應的轉動,以指示方向。
效果如圖所示:
如需要下載工程源文件,請點擊:http://download.csdn.net/detail/ganzi1991/7125385
總結
以上是生活随笔為你收集整理的Android指南针程序的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL:1082. 销售分析 1-3
- 下一篇: Android - 通知Notifica