Обнаружение изменения ориентации экрана на 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 возвращается, когда устройство близко к плоскости и ориентация не может быть определена."

Другие вопросы по тегам