Android指南针程序的实现 您所在的位置:网站首页 指南针代码 Android指南针程序的实现

Android指南针程序的实现

2023-12-11 22:34| 来源: 网络整理| 查看: 265

在Android中,指南针功能是依靠Android手机内置的方向传感器实现的。并且Android系统也已经封装好了针对这些传感器的所需操作,不用我们从底层去了解,因此编程变得相当简单。下面介绍如何实现指南针功能。

1、新建一个Activity,使其实现SensorEventListener接口。如下所示:

public class compassActivity extends Activity implements SensorEventListener { @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } @Override public void onSensorChanged(SensorEvent arg0) { } }

可以看到,SensorEventListener接口提供两个重载方法,在这里我们只去复写onSensorChanged方法,当传感器的值发生变化时会触发这个方法。我们就在这个方法中改变指南针的方向。

2、在介绍业务代码之前,先来看一下Activity的布局:

其中EditText用来显示传感器角度变化值,ImageView则直观的显示这种变化。

2、业务实现:

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; @Override protected 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") @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); SM = (SensorManager) getSystemService(SENSOR_SERVICE); SM.registerListener(compassActivity.this, SM.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); } @Override protected void onPause() { SM.unregisterListener(compassActivity.this); super.onPause(); } @Override protected void onStop() { SM.unregisterListener(compassActivity.this); super.onStop(); } @Override public void onAccuracyChanged(Sensor arg0, int arg1) { // TODO Auto-generated method stub } @Override public 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]; //创建旋转动画,反向转过degree度 RotateAnimation ra = new RotateAnimation(currentDegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置动画的持续时间 ra.setDuration(200); //运行动画 compassImage.startAnimation(ra); currentDegree = -degree; break; } } } 以上代码显示,当传感器的值发生变化时,我们就让ImageView中的图片发生相应的转动,以指示方向。

效果如图所示:

效果如图所示:

如需要下载工程源文件,请点击:http://download.csdn.net/detail/ganzi1991/7125385



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有