android屏幕重力感应如何实现,很质量的一个问题

由于重力感应器在板上安装的方向不同,而移植时需要调整相关的代码。

本人推荐好资料技术网:http://www.baisoujs.com

解决屏幕显示颠倒相关问题,相关的有两部分代码:
1. 内核重力感应器驱动部分,如 MMA7660
1vi drivers/input/gsensor/mma7660.c
在这个文件中寻找相似以下的代码
1axis.y = mma7660_convert_to_int(buffer[MMA7660_REG_X_OUT]);
2axis.x = mma7660_convert_to_int(buffer[MMA7660_REG_Y_OUT]);
3axis.z = mma7660_convert_to_int(buffer[MMA7660_REG_Z_OUT]);
然后按照你自己板的需要,将 X,Y 进行交换,进行相反数运算,将 Z 进行相反运算。
其实可以做得更方便一些,把这几个操作写到 Kconfig 里面,通过宏来控制这些运算,就不用再改代码了。
01#ifdef CONFIG_SWAP_XY
02{
03 typeof(x) __tmp;
04 __tmp = x;
05 x = y;
06 y = __tmp;
07}
08#endif
09
10#ifdef CONFIG_REVERSE_X
11 x = -x;
12#endif
13
14#ifdef CONFIG_REVERSE_Y
15 y = -y;
16#endif
17/* X Y 感应方向有问题,这很容易看出来。 */
18#ifdef CONFIG_REVERSE_Z
19 z = -z; /* 按正常情况下拿着设备,屏幕斜向上,如果不灵敏,把屏幕朝下试试,如果灵敏了,一般是 Z 反了。 */
20#endif
2. Android部分,如果出现菜单显示正常,但是玩重力感应游戏时有问题,这部分就要修改(2.1)
1vim frameworks/base/core/java/android/view/WindowOrientationListener.java
1public void onSensorChanged(SensorEvent event) {
2 float[] values = event.values;
3 float X = values[_DATA_X];
4 float Y = values[_DATA_Y];
5 float Z = values[_DATA_Z];
6 float OneEightyOverPi = 57.29577957855f;

7 float gravity = (float) Math.sqrt(X*X+Y*Y+Z*Z);


本文出自:http://www.baisoujs.com/detail_136988736881557.html

转载于:https://my.oschina.net/u/1189001/blog/147514

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值