5

我正在为 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;
  }
}

但它不起作用。请问有人可以修吗?

4

1 回答 1

7

您可能希望setDisplayOrientation按如下方式使用该函数:

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

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

于 2012-08-27T20:19:52.993 回答