• 我们根据地磁传感器和加速度传感器来进行当前手机旋转的方向
  • 同时使用一个imageView来展示我们当前的方向的展示,并让其根据手机旋转的角度来旋转指向正确的方向
public class MainActivity extends AppCompatActivity {private SensorManager sensorManager;private Sensor accelerometerSensor;//加速度传感器private Sensor magneticSensor;//地磁传感器private ImageView imageView;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();//将两个传感器注册       sensorManager.registerListener(listener,accelerometerSensor,SensorManager.SENSOR_DELAY_GAME);sensorManager.registerListener(listener,magneticSensor,SensorManager.SENSOR_DELAY_GAME);}private void init() {sensorManager= (SensorManager) getSystemService(SENSOR_SERVICE);accelerometerSensor=sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);magneticSensor=sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);imageView= (ImageView) findViewById(R.id.imageView);}private SensorEventListener listener=new SensorEventListener() {float[] accelerometerValues=new float[9];float[] magneticValues=new float[3];float lastDegree;//用来记录旋转之前的角度@Overridepublic void onSensorChanged(SensorEvent event) {//if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){//在赋值的时候一定要调用一下values的clone()方法//获取加速度传感器中的数据,是一个长度为9的数组accelerometerValues=event.values.clone();}else if (event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){//获取地磁传感器的数据,是一个长度为3的数组magneticValues=event.values.clone();}float[] R=new float[9];float[] values=new float[3];//通过下面的方法,获取一个包含旋转矩阵的数组,并将值赋给R,SensorManager.getRotationMatrix(R,null,accelerometerValues,magneticValues);SensorManager.getOrientation(R,values);//values[0]中是围绕z轴旋转的角度,应用Math类将其转换为角度Log.d("MainActivity",Math.toDegrees(values[0])+"");float rotateDegree= (float) -Math.toDegrees(values[0]);//应用动画,根据角度的变化,来旋转指南针图片if (Math.abs(rotateDegree-lastDegree)>1){new ObjectAnimator().ofFloat(imageView,"rotation",lastDegree,rotateDegree).setDuration(100).start();lastDegree=rotateDegree;}}@Overridepublic void onAccuracyChanged(Sensor sensor, int accuracy) {}};//最后别忘记取消注册传感器protected void onDestroy() {super.onDestroy();sensorManager.unregisterListener(listener);}
}

传感器--方向传感器制作指南针相关推荐

  1. Android Manager之SensorManager(传感器)—方向传感器(Orientation sensor)

    本章节讲述方向传感器(Orientation sensor)的相关使用. 如果您还不了解传感器的相关知识,请点击:Android Manager之SensorManager(传感器)-基础知识 1.方 ...

  2. Android-方向传感器(制作指南针)

    方向传感器(制作指南针) Android中的方向传感器可以准确的判断出手机在各个方向的旋转角度,利用这些角度就可以编写出像指南针.地平仪等有用的工具.下面,我来制作一个简单指南针.先附上代码: Act ...

  3. Android 利用方向传感器实现 指南针

    step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中 step2:设计应用的UI界面,main.xml <?xml version=" ...

  4. Android 利用方向传感器实现 指南针

    step1:新建一个项目Compass,并将一张指南针图片导入到res/drawable-hdpi目录中 step2:设计应用的UI界面,main.xml <?xml version=" ...

  5. Android 电子罗盘 --指南针(方向传感器的应用)

    ,图片神马的在网上搜个指南针图片就好了,本来没有注释,发上来之后感觉不行,还是加上吧,方便学习 main.xml <?xml version="1.0" encoding=& ...

  6. Android学习-指南针(方向传感器)

    Android学习-指南针 效果图(背景图片网上随便找的): 1.编写布局文件activity_main.xml文件 主要放一个东南西北方向图片,一个指针图片用来指明方向 <?xml versi ...

  7. Android -- 传感器使用示例, 用方向传感器做指南针

    1. 传感器类型:方向.加速度(重力).光线.磁场.距离(临近性).温度等. 方向传感器:   Sensor.TYPE_ORIENTATION 加速度(重力)传感器: Sensor.TYPE_ACCE ...

  8. Android方向传感器实践——自己动手做指南针

    传感器(Sensor)系统可以让智能手机的功能更加丰富多彩,在Android系统中支持多种传感器.Android的Sensor系统涉及了Android的各个层次. Android系统支持多种传感器,有 ...

  9. Android方向传感器学习之指南针示例

    刚刚跟着视频学习了关于Android中传感器的操作示例,利用方向传感器做了一个很简单的指南针应用...平时工作项目中很少有用到传感器功能,所以很多都不知道,现在自学些,当作慢慢入门吧... 首先贴出软 ...

最新文章

  1. 红5java_关于skywang123456之“红黑树(五)之 Java的实现”的改进与内容添加
  2. php es6写法,ES6...扩展运算符(示例代码)
  3. ESXi上的固态硬盘识别为非SSD
  4. 一篇文章带你了解python装饰器
  5. idea如何安装lombok
  6. nba2k19登陆显示你与服务器,NBA2K19无法登陆了?NBA2K19连不上服务器怎么办?[图]...
  7. C++ Vector 使用心得
  8. mysql查询没有权限试图_MySQL迁移后提示查询view权限不足的处理
  9. php海外研发,国外主流PHP框架比较
  10. js生成二维码,中间有logo
  11. 经验:如何做好两台BXP服务器(转)
  12. 数值计算软件有哪些?一款国产软件非常亮眼。
  13. 已知两数的最大公因数和最小公倍数
  14. c盘扩容提示簇被标记_电脑C盘爆满飘红?系统卡?试试这两种解决办法
  15. 虚拟机RedHatLinux9安装Oralce92全过程
  16. php7.2 webshell,phpStudy后门分析
  17. c语言编译器只有9行怎么添加,avr单片机c语言编译器(9页)-原创力文档
  18. element ui中的el-input回车键事件
  19. JAVA梅森旋转随机算法_伪随机数生成算法-梅森旋转(Mersenne Twister/MT)
  20. python decode函数的用法_decode函数的用法

热门文章

  1. 时空大数据要把握“后发优势”
  2. 数组Array.slice()方法应用与底层原理剖析
  3. hyper-v导入硬盘无法启动解决方法
  4. 前端开发常见的英语词汇
  5. MySQL之正则表达式
  6. 【快速简单登录认证】SpringBoot使用Sa-Token-Quick-Login插件快速登录认证
  7. python银行家算法例题详解_攒人品之作-能考408大题的知识点整理(有两个知识点的补充)...
  8. 学校计算机总帐和明细帐的表格,总账与明细账
  9. 【上海居转户申请流程及材料清单|干货分享】
  10. 向量余弦值(Cosine)(C#)