安卓传感器的方向问题与边缘到边缘插入



在边缘到边缘模式中,检查各种插入(状态栏、导航栏等(以调整UI通常很有用。不幸的是,当设备处于传感器支持的方向(例如sensorLandscape(时,当从横向更改为反向横向时,"活动"不会被重新创建。反向横向镶嵌不同于横向镶嵌。这导致了知道何时根据更新的插入重新调整UI的问题。

自己处理方向更改也不会在横向和反向横向转换之间触发onConfigurationChanged回调。OrientationListener仅告诉您当前的方位度,当手机进行反向翻转时,很难准确地"计时"。大多数手机不支持反向纵向,有些不支持反向横向,因此也很难知道手机是否真的翻转到了反向横向(在OrientationListener中轮询requestedOrientation只显示为sensorLandscape,而不是当前的(。

有什么方法可以获得风景吗;反向横向活动重新创建,或者至少检测到或在活动翻转到反向时收到通知?

我发现的仅限的工作解决方案需要轮询,而且有点复杂;

1(确定设备的自然方向。这是通过将当前方向(仅为横向或纵向(与显示器当前旋转进行比较来实现的。

  • 0或180度旋转的人像自然是人像
  • 旋转90或270的人像自然是风景
  • 0或180度旋转的景观是自然景观
  • 旋转90或270度的风景自然是人像

自然纵向意味着当显示器为纵向时旋转为0,同样自然横向意味着当显示为横向时旋转为零。

注意:在拐角情况下-由于当前方向和显示器旋转短暂不同步,因此需要在不旋转的情况下进行此操作。如果你对它进行几次轮询以使它退出,你可以确保你没有在轮换中抓住它。

2(既然知道了自然方向,就可以随时轮询当前的显示旋转,并确定当前的真实方向。

对于自然的人像显示:

  • 0是肖像
  • 90是风景
  • 180是反向肖像
  • 270为反向横向

对于自然景观显示:

  • 0为横向
  • 90是反向肖像
  • 180为反向横向
  • 270是肖像

最后,我建立了一个共享的协同程序channelFlow,它在订阅时以250毫秒的延迟轮询循环中的显示旋转,并在发现当前方向+增量时吐出它们。所以现在我可以订阅更新,知道方向何时更改为任何方向或反向,并可以根据需要重新调整。

最新更新