在Android上检测屏幕方向更改而不扩展活动

时间:2017-03-14 13:40:14

标签: android screen-orientation android-unity-plugin

我有这个针对Unity的Android插件。目前,它每帧重新计算一次相机的投影矩阵,虽然这有效,但显然非常浪费。我希望只有在屏幕方向改变时才能重新计算矩阵,因为这是唯一需要重新计算的时间。

然而,当我在线查看时,我似乎总能找到的所有答案总是实现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 个答案:

答案 0 :(得分:1)

正如您所提到的,我认为您可以使用OrientationEventListener实现:

void onOrientationChanged (int orientation) {
   if (orientationIsChanged(orientation)) {
                      // recalculate matrix
   }
}

你必须实施

  

boolean orientationIsChanged(int angle)

考虑到:  “当设备朝向自然位置时,方向为0度,当左侧位于顶部时为90度,倒置时为180度,右侧为顶部时为270度。当ORIENTATION_UNKNOWN返回时返回设备接近平坦,无法确定方向。“