Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正确处理摄像机的旋转(在TextureView中)_Android_Android Camera - Fatal编程技术网

Android 正确处理摄像机的旋转(在TextureView中)

Android 正确处理摄像机的旋转(在TextureView中),android,android-camera,Android,Android Camera,我尝试在我的应用程序中使用摄像头,但在正确处理配置更改时遇到问题。我知道在典型的活动(onSaveInstanceState等)中处理配置更改的正确方法,但这里的情况并非如此 把我的活动想象成一个全屏相机预览,带有一个叠加快门按钮和一个用于裁剪图像的框架 我想要实现的目标(HTC Sense相机库存预览): 也就是说:TextureView上的摄影机预览不应在旋转时重新创建,但活动应具有方向意识,以定位元素 我很确定我不想在轮换时重新创建活动。所以我尝试了android:configChange

我尝试在我的应用程序中使用摄像头,但在正确处理配置更改时遇到问题。我知道在典型的
活动
(onSaveInstanceState等)中处理配置更改的正确方法,但这里的情况并非如此

把我的活动想象成一个全屏相机预览,带有一个叠加快门按钮和一个用于裁剪图像的框架

我想要实现的目标(HTC Sense相机库存预览):

也就是说:
TextureView
上的摄影机预览不应在旋转时重新创建,但活动应具有方向意识,以定位元素

我很确定我不想在轮换时重新创建
活动。所以我尝试了
android:configChanges
方法。问题是仍然会调用
onSurfaceTextureSizeChanged()
,相机预览会旋转,整个体验并不平滑(预览会延迟一段时间,然后“重新创建”或其他内容)

我尝试通过
android:screenOrientation=“landscape”
将我的活动锁定到横向,但这样就不会调用
onConfigurationChanged()
,我不知道如何定位上面视频中的其他视图。我想我可以听一些加速器事件,但我很确定有更好的方法。有吗?

试试这个选项

android:configChanges="keyboardHidden|orientation|screenSize"


锁定活动旋转。在MyOrientationEventListener的方法
onOrientationChanged
中,你可以旋转、改变视图的位置等。我认为这是最好的方法。

不久前,我玩过股票摄像头(sdk 11之前)的源代码,看看他们是如何为我自己实现这种行为的。我不完全记得他们是如何做到这一点的,但他们手动处理方向的变化,并在ImageView中旋转图像。可能值得一看,因为它是以一种非常简单的方式实现的。我已经尝试并在我的问题中写道:“我非常确定我不希望在旋转时重新创建活动。所以我尝试了android:configChanges方法。”在ICS摄像头中,您可以找到平滑旋转小部件的简单代码(在同一个侦听器中)。但是,状态栏将始终以纵向模式(在设备顶部)显示,而不是由旋转来处理。