Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 827|回复: 0

Android 小球重力感应实现(二) - Android学习

[复制链接]

该用户从未签到

发表于 2011-10-27 08:16:37 | 显示全部楼层 |阅读模式
       3.注册SensorEventListener

       使用SensorMannager调用getDefaultSensor(Sensor.TYPE_ACCELEROMETER)方法拿到加速重力感应的Sensor对象。因为本章我们讨论重力加速度传感器所以参数为Sensor.TYPE_ACCELEROMETER,如果须要拿到其它的传感器须要传入对应的名称。使用SensorMannager调用registerListener()方法来注册,第三个参数是检测的灵敏精确度根据不同的需求来选择精准度,游戏开发建议使用  SensorManager.SENSOR_DELAY_GAME。

java代码:
  1. mSensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
  2. mSensor = mSensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  3. // 注册listener,第三个参数是检测的精确度
  4. //SENSOR_DELAY_FASTEST 最灵敏 因为太快了没必要使用
  5. //SENSOR_DELAY_GAME 游戏开发中使用
  6. //SENSOR_DELAY_NORMAL 正常速度
  7. //SENSOR_DELAY_UI 最慢的速度
  8. mSensorMgr.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_GAME);
复制代码

       重力感应简单速度计算的方式。 每次摇晃手机计算出 X轴 Y轴 Z轴的重力分量可以将它们记录下来 然后每次摇晃的重力分量和之前的重力分量可以做一个对比 利用差值和时间就可以计算出他们的移动速度。

java代码:
  1. private SensorManager sensorMgr;
  2. Sensor sensor = sensorMgr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
  3. //保存上一次 x y z 的坐标
  4. float bx = 0;
  5. float by = 0;
  6. float bz = 0;
  7. long btime = 0;//这一次的时间
  8. sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE);
  9. SensorEventListener lsn = new SensorEventListener() {
  10. public void onSensorChanged(SensorEvent e) {
  11. float x = e.values[SensorManager.DATA_X];
  12. float y = e.values[SensorManager.DATA_Y];
  13. float z = e.values[SensorManager.DATA_Z];
  14. //在这里我们可以计算出 X Y Z的数值 下面我们就可以根据这个数值来计算摇晃的速度了
  15. //我想大家应该都知道计算速度的公事 速度 = 路程/时间
  16. //X轴的速度
  17. float speadX = (x - bx) / (System.currentTimeMillis() - btime);
  18. //y轴的速度
  19. float speadY = (y - by) / (System.currentTimeMillis() - btime);
  20. //z轴的速度
  21. float speadZ = (z - bz) / (System.currentTimeMillis() - btime);
  22. //这样简单的速度就可以计算出来 如果你想计算加速度 也可以 在运动学里,加速度a与速度,
  23. //位移都有关系:Vt=V0+at,S=V0*t+1/2at^2, S=(Vt^2-V0^2)/(2a),根据这些信息也可以求解a。
  24. //这里就不详细介绍了 公事 应该初中物理课老师就教了呵呵~~
  25. bx = x;
  26. by = y;
  27. bz = z;
  28. btime = System.currentTimeMillis();
  29. }
  30. public void onAccuracyChanged(Sensor s, int accuracy) {
  31. }
  32. };
  33. // 注册listener,第三个参数是检测的精确度
  34. sensorMgr.registerListener(lsn, sensor, SensorManager.SENSOR_DELAY_GAME);
复制代码



系列之Android 小球重力感应实现(一)的帖子链接http://www.eoeandroid.com/thread-98306-1-1.html
系列之Android 小球重力感应实现(三)的帖子链接http://www.eoeandroid.com/thread-98312-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 21:00 , Processed in 0.292837 second(s), 37 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表