Я пытаюсь понять, как я могу узнать, находится ли экран устройства лицом к пользователю или, например, плоский на столе с экраном, смотрящим вверх или вниз, и т. Д.
I 'Я не использую датчик ориентации, поскольку он устарел. Я использую матрицу вращения, я знаю, что значения шага и крена должны быть хорошими, чтобы получить эту информацию, но прежде, чем я получу эти значения, мне нужно переназначить систему координат и узнать, какая ось является Xи какой из них мне нужен, чтобы знать, с какой стороны экрана.
Например: если экран обращен к пользователю, я могу использовать эту таблицу отображения
ROTATION_0 XY
ROTATION_90 -YX
ROTATION_180 -X -Y
ROTATION_270 Y -X
Если экран обращен к небу, возможно, мне придется поменять ось Y на ось Z, но я не знаю, как узнать, где находится экран.
Есть идеи?
Я также использую этот метод, который нашел в сети (http://code.google.com/p/the-schwartz-unsheathed/source/browse/trunk/src/com/android/app/schwarz/PhoneOrientation.java?r=12)
public static int getOrientation(float roll, float pitch) {
int orientation = ORIENTATION_INVALID;
if (Math.abs(roll) == 0.0 && Math.abs(pitch) == 0.0){
return ORIENTATION_INVALID;
}
if(roll >= -90 && roll <= -(90-mTolerance)){
orientation = ORIENTATION_FACE_LEFT;
}
else if(roll <= 90 && roll >= (90-mTolerance)){
orientation = ORIENTATION_FACE_RIGHT;
}
if(pitch >= (90-mTolerance) && pitch <= (90+mTolerance)) {
if(orientation != ORIENTATION_INVALID){
orientation = ORIENTATION_INVALID;
}
else {
orientation = ORIENTATION_FACE_FORWARD;
}
} else if(pitch <= -(90-mTolerance) && pitch >= -(90+mTolerance)) {
if(orientation != ORIENTATION_INVALID) {
orientation = ORIENTATION_INVALID;
}
else {
orientation = ORIENTATION_FACE_BACKWARD;
}
}
if((roll >= -mTolerance && roll <= mTolerance)) {
if((pitch >= -mTolerance && pitch <= mTolerance)) {
if(orientation != ORIENTATION_INVALID) {
orientation = ORIENTATION_INVALID;
}
else {
orientation = ORIENTATION_FACE_UP;
}
} else if((pitch <= -(180-mTolerance) && pitch >= -180) || (pitch >= (180-mTolerance) && pitch <= 180)) {
if(orientation != ORIENTATION_INVALID) {
orientation = ORIENTATION_INVALID;
}
else {
orientation = ORIENTATION_FACE_DOWN;
}
}
}
return orientation;
}
У кого-нибудь есть лучше?