什么是相同的setDisplayOrientation()的Camera2 API?

使用android.hardware.Camera ,为了让摄像机输出适当地跟踪设备移动,我们需要将OrientationEventListenerCamera上的setDisplayOrientation()方法。 这样,当用户扭转设备时,我们可以保持相机预览中的“向上”与现实世界中的“向上”同步。 对于围绕Y轴旋转设备(即,从横向翻转到反向横向或向后),尤其如此。

对于大多数方向更改, android.hardware.camera2 API似乎“正常工作”。 但是,对于Y轴旋转(横向 – >反向横向或反向横向),相机预览会反转。

Camera为Camera2 API调用setDisplayOrientation()相当于什么,所以我们可以处理这种情况?

正如您所注意到的,这应该在camera2 API上为SurfaceView “正常工作”。

因此,没有setDisplayOrientation()等价物。

我们之前没有听说过这个问题,所以有几个问题:

  1. 您是否已将应用锁定为横向,或者您是否允许更改方向?
  2. 您是否处理了自己的方向更改,或者在方向发生变化时是否拆除框架并重新启动应用程序?
  3. 发生180度旋转时是否会触发任何types的重新布局,例如调整快门按钮的位置?

使用下面的公式来获取设备旋转。

 private int getOrientation(int rotation) { return (ORIENTATIONS.get(rotation) + mSensorOrientation + 270) % 360; } 

SensorOrientation是从中分配的字段

 characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION) 

谷歌工程师建议的解决方案:yaraki

https://github.com/googlesamples/android-Camera2Basic/issues/24

空无一人。

如果交换显示方向与传感器方向相比,它不会“正常工作”(在大多数设备上都是纵向模式),因为您必须为预览表面设置宽高比<1,即相机2无法映射到适合的输出尺寸。 解:

  • 在第一个API中,您使用camera.setDisplayOrientation()
  • 在camera2中,我找不到使用SurfaceHolder的方法,但只有SurfaceTexture与surfaceTexture.setTransform (android.graphics.Matrix)以纵向模式调用。

使用此CaptureRequest JPEG_ORIENTATION设置显示方向

captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, 90)