我的应用上有一个视频,当用户将设备从纵向旋转到横向时,我试图做到这一点。视频会变为全屏显示。
我这样使用OrientationEventListener
:
orientationEventListener = new OrientationEventListener(this, SensorManager.SENSOR_DELAY_NORMAL) {
@Override
public void onOrientationChanged(int orientation) {
if (orientation <= 45 && playerManager.isFullscreen()) {
onPlayerFullscreenChange(false); //ORIENTATION_PORTRAIT
} else if (orientation <= 135 && !playerManager.isFullscreen()) {
onPlayerFullscreenChange(true); //ORIENTATION_LANDSCAPE
} else if (orientation <= 225 && playerManager.isFullscreen()) {
onPlayerFullscreenChange(false); //ORIENTATION_PORTRAIT
} else if (orientation <= 315 && !playerManager.isFullscreen()) {
onPlayerFullscreenChange(true); //ORIENTATION_LANDSCAPE
}
}
};
问题在于此监听器被调用了很多次,导致我的视频无法正常播放。与以前不同,该活动最终多次抛出OnCreate
。
答案 0 :(得分:0)
每次传感器检测到您握持Android设备的方式发生变化时,onOrientationChanged(int orientation)方法都会通知您。
用户几乎不可能将设备保持静止,因此onOrientationChanged()被多次调用。
我从您的问题中了解到,您只想在用户水平握住设备时以全屏显示视频。
因此将0-45、135-255和315-360的角度值视为“垂直”。 并且,水平角度在45-135和225-315之间。 如果您考虑一下,这将是有道理的。
存储“先前方向”,例如,如果使用String,则可以将其初始设置为null。然后将其与当前检测到的方向进行比较,如果不一致,则采取措施(将视频设置为全屏,反之亦然),然后将当前方向值保存为“以前的方向”。
这个问题实际上归结为更好地实现您的算法。祝一切顺利!