开发指南针思路很简单:准备一张指南针图片,该图片上方向指针指向北方。接下来开发一个检测方向的传感器,程序检测到手机顶部绕Z轴转过多少度,让指南针图片反向转过多少度即可。

程序代码:

package org.crazyit.sensor;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.ImageView;public class Compass extends Activity implements SensorEventListener {// 定义显示指南针的图片ImageView znzImage;// 记录指南针图片转过的角度float currentDegree = 0f;// 定义Sensor管理器SensorManager mSensorManager;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);// 获取界面中显示指南针的图片znzImage = (ImageView) findViewById(R.id.znzImage);// 获取传感器管理服务mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);}@Overrideprotected void onResume() {super.onResume();// 为系统的方向传感器注册监听器mSensorManager.registerListener(this,mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),SensorManager.SENSOR_DELAY_GAME);}@Overrideprotected void onPause() {// 取消注册mSensorManager.unregisterListener(this);super.onPause();}@Overrideprotected void onStop() {// 取消注册mSensorManager.unregisterListener(this);super.onStop();}@Overridepublic void onSensorChanged(SensorEvent event) {// 获取触发event的传感器类型int sensorType = event.sensor.getType();switch (sensorType) {case Sensor.TYPE_ORIENTATION:// 获取绕Z轴转过的角度。float degree = event.values[0];<strong>// 创建旋转动画(反向转过degree度)RotateAnimation ra = new RotateAnimation(currentDegree, -degree,Animation.RELATIVE_TO_SELF, 0.5f,Animation.RELATIVE_TO_SELF, 0.5f);</strong>// 设置动画的持续时间ra.setDuration(200);// 运行动画znzImage.startAnimation(ra);currentDegree = -degree;break;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}}
布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="fill_parent"    android:background="#fff"    android:orientation="vertical" >    <ImageView        android:id="@+id/znzImage"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:scaleType="fitCenter"        android:src="@drawable/znz" /></LinearLayout>

演示结果:



更多相关文章

  1. Android中利用OnTouchListener在ImageView中框选显示图片
  2. android ImageView实现上面圆角下面直角(xml实现方法)
  3. android 自定义view实现图形移动
  4. android关于内存溢出的异常
  5. 【推荐收藏】2017年最新的分类Android项目源码免费一次性打包下
  6. Android如何获取视频首帧图片
  7. android广告自动滚动并用picasso实现图片加载
  8. android百度地图自定义marker,使用网络图片
  9. Android(安卓)Studio图片框

随机推荐

  1. Android的信号格数显示优化
  2. Android监听消息通知栏点击事件
  3. 分享到某个地方
  4. 使用 Android 和 XML 构建动态用户界面
  5. arm-linux-androideabi-gcc 4.8的选项分
  6. Android UI开发第六篇——仿QQ的滑动Tab
  7. Android:Manifest merger failed with mu
  8. Android多媒体开发 Pro Android(安卓)Med
  9. Android画图 Bitmap
  10. 简单的Android日志文件记录类