什么是setDisplayOrientation()的Camera2 API等价物?

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

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

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

Solutions Collecting From Web of "什么是setDisplayOrientation()的Camera2 API等价物?"

正如你已经注意到的,这应该是在camera2 API上的SurfaceView上“正常工作”。

因此,没有相同的setDisplayOrientation()

我们现在还没有听说过这个问题,所以有几个问题:

  1. 你的应用程序是否locking在风景中,还是允许方向更改?
  2. 您是否处理自己的方向更改,或者当您的方向更改时是否将框架拆除并重新启动应用程序?
  3. 当发生180度旋转时,您是否触发了任何重新布局,例如调整快门button的位置?

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

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

SensorOrientation是从中分配的字段

 characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION) 

谷歌工程师build议的解决scheme:yaraki

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

空无一人。

如果显示屏方向与传感器方向相比(在大多数设备上这是纵向模式下的情况),那么它不会“正常工作”,因为您必须将预览表面的纵横比设置为<camera2无法映射到拟合输出尺寸。 解:

  • 在第一个API中,你使用camera.setDisplayOrientation()
  • 在camera2中,我无法find使用SurfaceHolder的方法,但是只有在纵向模式下调用surfaceTexture.setTransform (android.graphics.Matrix)的SurfaceTexture。