本质上有两种情况:设备平放不平。平面是指设备屏幕表面与世界xy平面之间的角度(我称之为倾斜度)小于25度或大于155度。想想电话平躺或从桌子上稍微倾斜一下。

首先,您需要对加速度计矢量进行归一化。

也就是说,如果g是由加速度传感器事件值返回的向量。在代码中

float[] g = new float[3];

g = event.values.clone();

double norm_Of_g = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2]);

// Normalize the accelerometer vector

g[0] = g[0] / norm_Of_g

g[1] = g[1] / norm_Of_g

g[2] = g[2] / norm_Of_g

那么倾斜度可以计算为

int inclination = (int) Math.round(Math.toDegrees(Math.acos(g[2])));

从而

if (inclination < 25 || inclination > 155)

{

// device is flat

}

else

{

// device is not flat

}

对于平放的情况,您必须使用指南针来查看设备从起始位置旋转多少。

对于不平坦的情况,旋转(倾斜)计算如下

int rotation = (int) Math.round(Math.toDegrees(Math.atan2(g[0], g[1])));

现在旋转= 0表示设备处于正常位置。这是大多数手机和平板电脑风景的肖像没有任何倾斜。因此,如果您按照上方的照片持有手机并开始旋转,则旋转将会改变,而当手机处于横向状态时,旋转将为90或-90取决于旋转方向。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐