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

Android重力感应实现方式简介

webgou16年前 (2010-08-08)编程开发102

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重力感应实现方式简介” 的相关文章

详解Android源码的编译详解Android源码的编译

本文将为大家介绍的是如何设置Android源码的编译环境,包括Linux下的配置。主要基于Android 1.0环境,希望对大家了解Android开发有所帮助。本次编译过程主要参考官方文档(http://source.Android.com/download)和网上相关资料(如http://blog…

char,short ,int ,long,long long,unsigned long long数据范围

 速查表:char -128 ~ +127 (1 Byte)...…

Using Blocks in iOS 4: The Basics

July 28, 2010 by Mike ClarkiOS 4 introduces one new feature that will fundamentally change the way you program in general: blocks. Blocks are an exten…

WTL::CString分析点滴

WTL CString 分析点滴 …

Linux终端中文编码

[root@naon ~]# localeLANG=zh_CN.UTF-8LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_COLLATE="…

突破障碍 用Google作代理畅游网络

突破障碍 用Google作代理畅游网络[from:http://tech.163.com/07/0429/09/3D83J91T000917GE.html]通常,当你在查看一个网页时,你计算机上的浏览器软件就会连接到目标服务器,下载页面的数据,接着再将它呈现在你的面前。一般情况下,这确实是访问网站的…

发表评论

访客

看不清,换一张

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