1

我有这个适用于 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);
}
4

1 回答 1

1

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

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

你必须实施

booleanorientationIsChanged(int 角度)

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

于 2017-03-14T13:55:55.607 回答