android sensor开发说明

 
android目前sensor开发接口有两种:
    SensorListener  老接口,注释为已过时,建议不采用的接口
         
    此接口默认坐标系以surface为参照物,也就是当系统界面发生旋转生,x,y 坐标也会
    跟着旋转,也就是界面的水平方向永远为x,垂直方向永远为y
    每个传感器有6个值,values[6],其中0,1,2为默认值,3,4,5为unwap的值,也就是
    设备sensor传递上来未交换的数值,我们也可以理解为以设备为参照物的数据
    此接口对于开发者容易理解,但对于android移植的人来说,需要对不同的surface
    orientation做不同的映射,并且android framework层的默认坐标映射代码,在做
    Orientation传感器的90/270度界面坐标转换时,把roll的方向搞反了,而其它手机
    设备(如G14/I900/U8500)基本上也未修正这个bug,游戏也基本是按照这个错误的标准
    来开发的,所以导致了一个不可修改的bug(这也可能是此接口被建议不采用的原因).
 
SensorEventListener 新接口
    此接口坐标系统以设备为参照物,规定以设备的surface ROTATION0为原始参照坐标
    也就是设备不做任何旋转时,水平方向为x,垂直方向为y,如果surface发生旋转,参照
    物是设备,x,y坐标不变,就样就把坐标系统转换的工作留给了开发者
     Surface0
     其中,accelerometer传感器数值x,y,z正负方向与老接口相反,orientation的第三个值
     roll正负方向与老接口相反
   
现在有很多Sensor游戏方向在我们设备上不对的原因,主要是发生在开发者使用了新接口
SensorEventListener,由于对新接口的坐标转换映射方向认识不够,或者只在手机一类默认为
竖屏的设备上测试过,所以放在我们默认为横屏的设备上,有可能会出现x,y坐标轴反掉的情况
 
使用新接口用来计算转换与surface相关的sample cod(development\samples\AccelerometerPlay\src)
            switch (mDisplay.getRotation()) {
                case Surface.ROTATION_0:
                    mSensorX = event.values[0];
                    mSensorY = event.values[1];
                    break;
                case Surface.ROTATION_90:
                    mSensorX = -event.values[1];
                    mSensorY = event.values[0];
                    break;
                case Surface.ROTATION_180:
                    mSensorX = -event.values[0];
                    mSensorY = -event.values[1];
                    break;
                case Surface.ROTATION_270:
                    mSensorX = event.values[1];
                    mSensorY = -event.values[0];
                    break;
            }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值