我在android中的方向有问题。设备方向是我在 AndroidManifest.xml 文件中设置的横向。
android:screenOrientation="landscape"
此外,我将设备保持在横向状态,因此所有内容(布局、视图等)都处于我想要的横向模式。但只有当我以纵向方式握住设备时,它才会为我提供所需的价值。
我从互联网上修改了一些代码,它适用于 HTC 3d EVO、Nexus 7 和三星 Galaxy S3,但不适用于 Galaxy Tablet 10"。
我找到了这篇文章。 不同设备的Android方向传感器不同? 接受的答案建议使用 getRotation() 和 remapCoordinateSystem() 方法,但没有提及如何使用。
这就是我的结局。
SensorManager.getRotationMatrix(Rmat, Imat, gData, mData);
SensorManager.remapCoordinateSystem(Rmat, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, R2);
// Orientation isn't as useful as a rotation matrix, but
// we'll show it here anyway.
SensorManager.getOrientation(R2, orientation);
float incl = SensorManager.getInclination(Imat);
FontTextView pitchText = (FontTextView)findViewById(R.id.pitch_text);
if((int)(orientation[1]*90) <= -110 && !newQuestionIsActive) {
newQuestionIsActive = true;
pitchText.setText("Bring new question");
}
else if(Math.abs((int)(orientation[2]*90)) <= 200 && (int)(orientation[1]*90) >= -30 && newQuestionIsActive) {
newQuestionIsActive = false;
pitchText.setText("Not Correct!");
}
else if(Math.abs((int)(orientation[2]*90)) > 200 && (int)(orientation[1]*90) >= -30 && newQuestionIsActive) {
newQuestionIsActive = false;
pitchText.setText("Congratulations!");
}
现在我应该如何在这段代码中使用 getRotation() ?并且可能是一个简短的解释,为什么提到的 3 款设备可以正常工作,但 Galaxy 平板电脑却不行。
关于这个问题android文档说;
最后,如果您的应用程序将传感器数据与屏幕显示相匹配,则需要使用 getRotation() 方法确定屏幕旋转,然后使用 remapCoordinateSystem() 方法将传感器坐标映射到屏幕坐标。即使您的清单指定仅纵向显示,您也需要这样做。
http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html