Обнаружение изменения ориентации экрана на Android без расширения Activity
У меня есть этот плагин Android для Unity. В настоящее время он пересчитывает матрицу проекции для камеры один раз за кадр, и, хотя это работает, это, очевидно, очень расточительно. Я хотел бы иметь возможность пересчитать матрицу только при изменении ориентации экрана, так как это единственный раз, когда его нужно будет пересчитать.
Однако, когда я смотрю онлайн, все ответы, которые я могу найти, всегда реализуют onConfigurationChanged или что-то подобное, что в конечном итоге требует от вас одного и того же: расширения класса Activity, чего я не могу сделать, поскольку Нет активности. Это просто библиотека, которая создается, а не полное приложение.
Я знаю, что есть OrientationEventListener
, но это срабатывает каждый раз, когда ориентация устройства изменяется даже на один градус, поэтому такой подход все еще будет очень расточительным.
То, что я хочу знать, есть ли способ обнаружить изменения ориентации экрана, такие как onConfigurationChanged
событие, которое не требует расширения Activity для использования?
В основном то, что я хочу закончить, это что-то вроде:
// Event fired only when the screen orientation changes
void onScreenOrientationChanged (ScreenOrientation orientation)
{
recalculateMatrix(orientation);
}
Вместо того, что у меня сейчас, что больше похоже на:
// Method called once per frame
void Draw ()
{
// Draw code
ScreenOrientation orientation = getOrientation();
recalculateMatrix(orientation);
}
1 ответ
Как вы упомянули, я думаю, что вы можете использовать OrientationEventListener для реализации:
void onOrientationChanged (int orientation) {
if (orientationIsChanged(orientation)) {
// recalculate matrix
}
}
и вы должны реализовать
логическая ориентация IsChanged(int angle)
принимая во внимание, что: "ориентация составляет 0 градусов, когда устройство ориентировано в его естественном положении, 90 градусов, когда его левая сторона находится сверху, 180 градусов, когда оно перевернуто, и 270 градусов, когда его правая сторона находится сверху.. ORIENTATION_UNKNOWN возвращается, когда устройство близко к плоскости и ориентация не может быть определена."