我有这个针对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);
}
答案 0 :(得分:1)
正如您所提到的,我认为您可以使用OrientationEventListener实现:
void onOrientationChanged (int orientation) {
if (orientationIsChanged(orientation)) {
// recalculate matrix
}
}
你必须实施
boolean orientationIsChanged(int angle)
考虑到: “当设备朝向自然位置时,方向为0度,当左侧位于顶部时为90度,倒置时为180度,右侧为顶部时为270度。当ORIENTATION_UNKNOWN返回时返回设备接近平坦,无法确定方向。“