如何在Surfaceview中将Android相机更改为肖像?

时间:2012-08-23 10:31:15

标签: java android android-camera surfaceview

我正在编写Android平板电脑,我希望我的应用程序使用surfaceView相机预览的纵向视图。默认情况下它是横向的,我尝试使用以下代码旋转到纵向视图:

public void surfaceCreated(SurfaceHolder holder){
  // The Surface has been created, acquire the camera and tell it where to draw.
  mCamera = Camera.open();
  Parameters params = mCamera.getParameters();
  // If we aren't landscape (the default), tell the camera we want portrait mode
  if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE){
    params.set("orientation", "portrait"); // "landscape"
    // And Rotate the final picture if possible
    // This works on 2.0 and higher only
    //params.setRotation(90);
    // Use reflection to see if it exists and to call it so you can support older versions
      try {
        Method rotateSet = Camera.Parameters.class.getMethod("setRotation", new Class[] { Integer.TYPE } );
        Object arguments[] = new Object[] { new Integer(270) };
        rotateSet.invoke(params, arguments);
      } catch (NoSuchMethodException nsme) {
        // Older Device
        Log.v("CameraView","No Set Rotation");
      } catch (IllegalArgumentException e) {
        Log.v("CameraView","Exception IllegalArgument");
      } catch (IllegalAccessException e) {
        Log.v("CameraView","Illegal Access Exception");
      } catch (InvocationTargetException e) {
        Log.v("CameraView","Invocation Target Exception");
      }
  }
  mCamera.setParameters(params);
  try{
    mCamera.setPreviewDisplay(holder);
  } catch (IOException exception) {
    mCamera.release();
    mCamera = null;
  }
}

但它不起作用。有人可以解决它吗?

1 个答案:

答案 0 :(得分:7)

您可能希望使用setDisplayOrientation功能,如下所示:

public void surfaceCreated(SurfaceHolder holder) {
    if (Build.VERSION.SDK_INT >= 8) mCamera.setDisplayOrientation(90);
}

使用相机params.set("orientation"...的设备在各种设备上并不一致,而且实际上是SDK 8之前的语言。