我在视图中实现了相机,就像在API演示中一样。但是它仅在横向模式下有效。但这对我不利,因为我想主要在人像模式下使用它。因此按钮等看起来非常糟糕。如何获得显示CameraPreview的SurfaceView并一起在protrait模式下工作?

我认为不必发布代码,因为我只是使用了API演示中的代码!

非常感谢你!

最佳答案

如果您未在AndroidManifest.xml文件中指定屏幕方向,则默认显示方向为横向位置,并且每次旋转手机时,Android都会更改获取的图像,以保持图像与手机对齐。因此,您有两个选择:

1.1。在AndroidManifest.xml文件中指定屏幕方向,并设置正确的屏幕方向:

AndroidManifest.xml:

        <activity
        android:label="@string/app_name"
        android:name=".CameraPreview"
        android:screenOrientation="portrait" >


CameraPreview.java:

       mCamera.setPreviewDisplay(holder);
       mCamera.setDisplayOrientation(90);


要么

AndroidManifest.xml:

        <activity
        android:label="@string/app_name"
        android:name=".CameraPreview"
        android:screenOrientation="landscape" >


CameraPreview.java:

       mCamera.setPreviewDisplay(holder);
       mCamera.setDisplayOrientation(0);


1.2。不要在AndroidManifest.xml文件中指定屏幕方向,并且不要在每次旋转屏幕时设置正确的屏幕方向:

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

      int rotation = ((Activity)mCtx).getWindowManager().getDefaultDisplay().getRotation();
      int degrees = 0;
      switch (rotation) {
        case Surface.ROTATION_0: degrees = 90; break;
        case Surface.ROTATION_90: degrees = 0; break;
        case Surface.ROTATION_180: degrees = 270; break;
        case Surface.ROTATION_270: degrees = 180; break;
      }

      mCamera.setDisplayOrientation(degrees);

      Camera.Parameters parameters = mCamera.getParameters();
      parameters.setPreviewSize(w, h);
      mCamera.setParameters(parameters);
      mCamera.startPreview();
    }


但是既然如此,看来您已经设计了带有按钮等的纵向布局,我认为最好的选择是第一个。

希望这能对您有所帮助。

10-08 15:39