相关疑难解决方法(0)

android摄像头surfaceview方向

好的,我有一个扩展SurfaceView和覆盖的类

surfaceChanged - 只需调用startPreview
surfaceCreated - 打开相机,编辑params*,设置surfaceHolder
surfaceDestroyed - 调用stopPreview,释放相机

这一切都很有效,因为当方向是肖像:

来自surfaceCreated*

m_camera = Camera.open();
Camera.Parameters p = m_camera.getParameters();

if (getResources().getConfiguration().orientation != 
    Configuration.ORIENTATION_LANDSCAPE)
{
    p.set("orientation", "portrait");

    // CameraApi is a wrapper to check for backwards compatibility  
    if (CameraApi.isSetRotationSupported())
    {
         CameraApi.setRotation(p, 90);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,每次方向改变时,它都会调用Camera.open()......正如您所知,这是一项非常昂贵的操作,导致转换不是那么顺利.

当我强制定位到横向时,预览很棒.创建只调用一次,因为预览是横向的,相机始终是用户看到的.但是,我需要一种方法来设置纵向拍摄时实际拍摄的照片的方向.当我强制横向渲染时,表面永远不会被重新创建,并且当相机以纵向方式保持时,参数永远不会被设置.

那么如何才能完成以下任一项(专门)?

  1. 当方向发生变化时,保持 onDestroy和onCreate之间的m_camera,以便过渡平滑

  2. 强制风景和检测方向改变另一种方式...旋转最终的snaped图片,如果保持纵向.

此外,如果我离开基地,有人能指出我更好的方向吗?谢谢.

android smartphone orientation android-sdk-2.1 android-camera

29
推荐指数
2
解决办法
5万
查看次数