我正在构建一个Android游戏,我想弄清楚用户是否向左或向右倾斜设备(类似于当你将人从一侧移到另一侧时Temple Run的工作方式).

我已经阅读了很多教程和示例,并且我制作了示例应用程序,但是从陀螺仪和加速度计中获取的数据量都是压倒性的.我是否需要两套硬件来确定用户是否倾斜设备以及在哪个方向?

我目前的应用是检测每一个轻微的动作,这显然是不正确的.

public class Main extends Activity {

private SensorManager mSensorManager;

private float mAccel; // acceleration apart from gravity

private float mAccelCurrent; // current acceleration including gravity

private float mAccelLast; // last acceleration including gravity

private RelativeLayout background;

private Boolean isleft = true;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

this.background = (RelativeLayout) findViewById(R.id.RelativeLayout1);

mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);

mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);

mAccel = 0.00f;

mAccelCurrent = SensorManager.GRAVITY_EARTH;

mAccelLast = SensorManager.GRAVITY_EARTH;

/* float x1, x2, y1, y2;

String direction;

switch(event.getAction()) {

case(MotionEvent.ACTION_DOWN):

x1 = event.getX();

y1 = event.getY();

break;

case(MotionEvent.ACTION_UP) {

x2 = event.getX();

y2 = event.getY();

float dx = x2-x1;

float dy = y2-y1;

// Use dx and dy to determine the direction

if(Math.abs(dx) > Math.abs(dy)) {

if(dx>0) directiion = "right";

else direction = "left";

} else {

if(dy>0) direction = "down";

else direction = "up";

}

}

}*/

}

private final SensorEventListener mSensorListener = new SensorEventListener() {

public void onSensorChanged(SensorEvent se) {

float x = se.values[0];

float y = se.values[1];

float z = se.values[2];

if((mAccelLast

background.setBackgroundResource(R.drawable.bg_right);

isleft = false;

}

if((mAccelLast>mAccelCurrent)&&(isleft == false)){

background.setBackgroundResource(R.drawable.bg_left);

isleft = true;

}

mAccelLast = mAccelCurrent;

mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));

float delta = mAccelCurrent - mAccelLast;

Log.d("FB", "delta : "+delta);

mAccel = mAccel * 0.9f + delta; // perform low-cut filter

// Log.d("FB", "mAccel : "+mAccel);

}

我最好只使用加速度计,只使用陀螺仪还是我需要两者?

解决方法:

根据我非常有限的经验,陀螺仪不断测量x,y,z旋转并不断更新.用于在游戏中驾驶汽车/飞机/角色.加速度计有点像wii-mote,用于摆动或拾取摇动手势.

标签:android,accelerometer,gyroscope,motion-detection

来源: https://codeday.me/bug/20190729/1571599.html

android 陀螺仪 加速度定位,Android陀螺仪版加速度计相关推荐

  1. android js gps定位,Android中的定位Demo

    可以按照这上面的流程去申请key值.在获取SHA1值的时候,推荐使用给的第一种方法(在cmd命令中获取,我之前使用的是从Eclipse>  Window > Preferences > ...

  2. android删除历史定位,android - 从历史记录中删除活动

    android - 从历史记录中删除活动 我的应用在用户首次运行应用时显示了注册活动,如下所示: 活动启动画面(欢迎使用游戏,注册帐户?) ActivitySplashScreenSignUp(很棒, ...

  3. android 陀螺仪加速度,何时使用Android上的加速度计或陀螺仪

    用户覆盖: 大部分设备同时具有陀螺仪和加速度计,但几乎每设备有一个加速度计.特别是较旧的设备和较便宜的设备没有陀螺仪.不要忘记,因为它是一个孩子的应用程序,也许父母不希望小孩使用他们的超级700美元的 ...

  4. android 陀螺仪源码,陀螺仪源码 android

    发表于 2015-12-03 07:47:55 by 月小升 package com.toplus.speedtest; import java.util.Locale; import com.top ...

  5. 微信定位精灵 android,微信定位精灵安卓版下载

    微信定位精灵安卓版下载是一款非常好用的位置伪装软件.可以让用户不会受任何地理位置的限制,也不需要担心自己被查岗的问题了,支持的软件也是很丰富的,定位也都是非常精准的.感兴趣的话就不要错过了,不妨来下载 ...

  6. Android 4高级编程(第3版)》

    <Android 4高级编程(第3版)> 基本信息 原书名:Professional Android 4 Application Development 作者: (英)Reto Meier ...

  7. Android 4高级编程(第3版)

    <Android 4高级编程(第3版)> 基本信息 原书名:Professional Android 4 Application Development 作者: (英)Reto Meier ...

  8. 《Android 4高级编程(第3版)》(完整书签).pdf

    下载地址:网盘下载 内容简介 编辑 <Android 4高级编程(第3版)>由Android权威专家编写,涵盖了所有最新的内容,是学习使用Android 4 SDK开发移动应用程序的理想指 ...

  9. 2015年最新Android基础入门教程目录(完结版)

    2015年最新Android基础入门教程目录(完结版) 标签(空格分隔): Android基础入门教程 前言: 关于<2015年最新Android基础入门教程目录>终于在今天落下了帷幕,全 ...

最新文章

  1. android Android build.gradle 配置注释
  2. 第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 L-回旋星空
  3. dd命令测试linux磁盘io情况,【LINUX】正确的使用dd进行磁盘读写速度测试
  4. Scikit-Learn 常用函数
  5. MySQL——高阶语句(上)
  6. Python安装Jupyter Notebook配置使用教程
  7. js 二叉树图形_js数据结构和算法(三)二叉树
  8. PLSQL中文显示乱码(问号)
  9. DOTNET零碎要点---字符串截取操作
  10. 《编码规范和测试方法——C/C++版》作业 ·005——设计一组员工类
  11. linux 系统安装mysql (rpm)
  12. 嵌入式Linux项目开发的几个步骤
  13. dotween路径移动_unity 移动物体到指定位置的几种方法
  14. SQL SERVER数据库三种数据插入方式
  15. JavaScript阿拉伯数字“1“转中文数“一“
  16. POJ 2112 Optimal Milking(最大流)
  17. java 网络 序列化_Java网络通信基础系列-Netty序列化
  18. 竞品分析—QQ、微信
  19. 【Nodejs】用http模块写一个简单的web服务器
  20. entity、bo、vo、po、dto、pojo如何理解及相互转化

热门文章

  1. flyme禁止系统更新_Flyme系统更新最新版本
  2. 魅族升级过程中出现android,彻底伤了,魅族16更新安卓9.0遥遥无期,工程师:升级费时费力不讨好...
  3. Linux内核分析实验3——分析linux内核启动过程
  4. 从安全继电器到安全控制器及安全控制系统的定义
  5. 【博弈论】极小极大搜索(Minimax Algorithm)与α-β剪枝(Alpha-Beta Pruning)
  6. [ros基础] --- roslaunch使用详解
  7. mac 安全性偏好设置
  8. 在你的计算机上使用qr码登录,如何设置和使用Microsoft Authenticator Qr代码
  9. Python控制安卓手机自动刷短视频实现金币收益
  10. 信息学奥赛一本通 1015 计算并联电阻的阻值