Java SurfaceView正在侧边显示相机馈送

Java SurfaceView正在侧边显示相机馈送,java,android,Java,Android,由于某些原因,我的程序中的摄影机馈送是横向的。如果我从底部将手指举到相机上,它会在surfaceview中显示为来自右侧 我有一个相当标准的实现 surfaceView = (SurfaceView)findViewById(R.id.surfaceView); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(surfaceCallback); surfaceHolder.set

由于某些原因,我的程序中的摄影机馈送是横向的。如果我从底部将手指举到相机上,它会在surfaceview中显示为来自右侧

我有一个相当标准的实现

    surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
    surfaceHolder = surfaceView.getHolder();
    surfaceHolder.addCallback(surfaceCallback);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
我环顾四周,但似乎找不到任何有关这方面的信息。我的设备是nexus One


编辑:如果我将屏幕方向设置为横向,那么出于某种原因,它可以正常工作。。。但无法在纵向中获取它。

预览显示图像的方向由方法控制。对于我的Evo,将方向设置为90可使预览显示在纵向模式下正确

...
camera.setParameters(parameters);
camera.setDisplayOrientation((orientation+90)%360);
camera.startPreview();
...
似乎在预览启动后更改方向会导致异常。如果更改手机/设备的旋转,将再次调用SurfaceHolder.surfaceChanged回调,如果在该回调中执行setDisplayOrientation和startPreview,则会出现异常。我将尝试停止预览,然后更改方向,然后再次开始


注:还有一种方法,即(我认为)在拍摄照片时将图像写入(JPEG)输出图像时,改变图像的方向。此方法不会更改预览显示方向。

预览显示图像的方向由方法控制。对于我的Evo,将方向设置为90可使预览显示在纵向模式下正确

...
camera.setParameters(parameters);
camera.setDisplayOrientation((orientation+90)%360);
camera.startPreview();
...
似乎在预览启动后更改方向会导致异常。如果更改手机/设备的旋转,将再次调用SurfaceHolder.surfaceChanged回调,如果在该回调中执行setDisplayOrientation和startPreview,则会出现异常。我将尝试停止预览,然后更改方向,然后再次开始

注:还有一种方法,即(我认为)在拍摄照片时将图像写入(JPEG)输出图像时,改变图像的方向。此方法不会更改预览显示方向。

使用此行

  mCamera.setDisplayOrientation(90);
表面处理法

  mCarmera.open();
用这条线

  mCamera.setDisplayOrientation(90);
表面处理法

  mCarmera.open();

我不久前也遇到过这个问题,从来没有抽出时间来解决它。我真的不认为问题出在你发布的代码中。我很久以前也遇到过这个问题,但从来没有抽出时间来解决它。我真的不认为问题出在你发布的代码上