当前位置:首页 > 编程开发

Android重力感应实现方式简介

webgou17年前 (2010-08-08)编程开发181

Android中的很多游戏的游戏都使用了重力感应的技术,但其api demo却并没有重力感应的实例(不知道是不是我没找到,找到的朋友麻烦告诉我一下,谢谢),因为开发的需要,就研究了一下重力感应这方面,因为网上关于 这方面的东西比较少,所以写出来跟大家交流一下,算是抛砖引玉吧。(ps.因为重力感应式需要真机才能测试的,所以,下面提供的demo程序只能在真机上 跑。)

因为官方说明比较含糊难懂,我用最简单的方式讲一下Android重力感应系统的坐标系

以屏幕的左下方为原点(2d编程的时候,是以屏幕左上方为原点的,这个值得注意一下),箭头指向的方向为正。从-10到10,以浮点数为等级单位,想象一下以下情形:

手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10);

手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10);

手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(10,0,0);

手机竖直(y轴朝天)向上的时候,(x,y,z)的值分别为(0,10,0);

其他的如此类推,规律就是:朝天的就是正数,朝地的就是负数。利用x,y,z三个值求三角函数,就可以精确检测手机的运动状态了。

接下来,用最短的代码完成Android重力感应功能,程序效果就是在title上面输出x,y,z的值。

Java代码

  1. package com.ray.test;   
  2. import Android.app.Activity;   
  3. import Android.os.Bundle;   
  4. import Android.hardware.SensorManager;   
  5. import Android.hardware.Sensor;   
  6. import Android.hardware.SensorEventListener;   
  7. import Android.hardware.SensorEvent;   
  8. public class SensorTest extends Activity {   
  9. private SensorManager sensorMgr;   
  10. Sensor sensor = sensorMgr.getDefaultSensor
    (Sensor.TYPE_ACCELEROMETER);   
  11. private float x, y, z;   
  12. protected void onCreate(Bundle savedInstanceState) {   
  13. super.onCreate(savedInstanceState);   
  14. sensorMgr = (SensorManager) 
    getSystemService(SENSOR_SERVICE);   
  15. SensorEventListener lsn = new SensorEventListener() {   
  16. public void onSensorChanged(SensorEvent e) {   
  17. x = e.values[SensorManager.DATA_X];   
  18. y = e.values[SensorManager.DATA_Y];   
  19. z = e.values[SensorManager.DATA_Z];   
  20. setTitle("x="+(int)x+","+"y="+(int)y+","+"z="+(int)z);   
  21. }   
  22. public void onAccuracyChanged(Sensor s, int accuracy) {   
  23. }   
  24. };   
  25. //注册listener,第三个参数是检测的精确度   
  26. sensorMgr.registerListener(lsn, sensor, 
    SensorManager.SENSOR_DELAY_GAME);   
  27. }   
  28. }

扫描二维码推送至手机访问。

版权声明:本文由知了博客发布,如需转载请注明出处。

本文链接:https://www.webgou.info/?id=258

标签: androidos
分享给朋友:

“Android重力感应实现方式简介” 的相关文章

工程源码目录

严谨用于商业行为,请下载后于24小时之内删除。 …

Visual Studio 2005 SP1安装

解压到%temp%\临时目录(对于我的Visual Studio 2005 Team System,这需要C:\Documents and Settings\Administrator\Local Settings\Temp下面1个多GB的空间) 把自己复制到%temp%下(400多MB) 把自己复…

Unity反编译备忘录

1. disunity+disunityGUI编译后可执行文件地址:https://github.com/ata4/disunity/releasesdisunity在github源码地址:https://github.com/ata4/disunity 2.DevXUnity-Unpac…

线程

线程是由两个部分组成的: * 一个是线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放 线程统计信息的地方。 * 另一个是线程堆栈,它用于维护线程在执行代码时需要的所有函数参数和局部变量 进程是不活泼的。进程从来不执行任何东西,它只是线程的…

unity打包批处理备份

suball.batcall build.batcd..call rename.bat-----rename.batdel MainActivity-release-unsigned.apk copy .\app\bin\MainActivity-release-unsigned.apk…

什么是好的API设计?

以前看别人设计api或sdk时,以为是件简单而有趣的事情,刚在csdn上看到一篇文章关于这个描述的:发表于09-05 16:33| 106次阅读| 来源richardminerich| 0 条评论| 作者Richard Minerich摘要:有人言,API设计是编程工作中最难的事情。甚至有人认为至少…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。