Android 利用方向传感器实现指南针具体步骤
Android 利用方向传感器实现指南针具体步骤
发布时间:2017-01-07 来源:查字典编辑
摘要:step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中step2:设计应用的UI界面,ma...

step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中

Android 利用方向传感器实现指南针具体步骤1

step2:设计应用的UI界面,main.xml

复制代码 代码如下:

<SPAN><STRONG><?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:gravity="center"

>

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/compass"

android:id="@+id/imageView"

/>

</LinearLayout></STRONG></SPAN>

step3:MainActivity.java

复制代码 代码如下:

import android.app.Activity;

import android.content.Context;

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.ImageView;

public class MainActivity extends Activity {

private ImageView imageView;

/** 传感器管理器 */

private SensorManager manager;

private SensorListener listener = new SensorListener();

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

imageView = (ImageView) this.findViewById(R.id.imageView);

imageView.setKeepScreenOn(true);//屏幕高亮

//获取系统服务(SENSOR_SERVICE)返回一个SensorManager 对象

manager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

}

@Override

protected void onResume() {

/**

* 获取方向传感器

* 通过SensorManager对象获取相应的Sensor类型的对象

*/

Sensor sensor = manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

//应用在前台时候注册监听器

manager.registerListener(listener, sensor,

SensorManager.SENSOR_DELAY_GAME);

super.onResume();

}

@Override

protected void onPause() {

//应用不在前台时候销毁掉监听器

manager.unregisterListener(listener);

super.onPause();

}

private final class SensorListener implements SensorEventListener {

private float predegree = 0;

@Override

public void onSensorChanged(SensorEvent event) {

/**

* values[0]: x-axis 方向加速度

values[1]: y-axis 方向加速度

values[2]: z-axis 方向加速度

*/

float degree = event.values[0];// 存放了方向值

/**动画效果*/

RotateAnimation animation = new RotateAnimation(predegree, degree,

Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);

animation.setDuration(200);

imageView.startAnimation(animation);

predegree=-degree;

/**

float x=event.values[SensorManager.DATA_X];

float y=event.values[SensorManager.DATA_Y];

float z=event.values[SensorManager.DATA_Z];

Log.i("XYZ", "x="+(int)x+",y="+(int)y+",z="+(int)z);

*/

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

}

}

step4:AndroidManifest.xml

复制代码 代码如下:

<SPAN><STRONG><?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="cn.roco.sensor"

android:versionCode="1"

android:versionName="1.0">

<uses-sdk android:minSdkVersion="8" />

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name="MainActivity"

android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

</manifest></STRONG></SPAN>

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新安卓软件开发学习
热门安卓软件开发学习
编程开发子分类