2

我正在将此相机预览应用程序用于我的 Android 应用程序。

我想要全屏预览相机。因此,我使用 Android API 中的示例尝试将预览设置为全屏。这就是我尝试这样做的方式:

if (!cameraConfigured) {
    Camera.Parameters parameters=camera.getParameters();
    Camera.Size size = getOptimalPreviewSize(mSupportedPreviewSizes, width, height);
    if (size != null) {
        parameters.setPreviewSize(size.width, size.height);

      camera.setParameters(parameters);
      cameraConfigured=true;
    }

我使用相对布局作为我的布局。我的布局设置如下:

<android.view.SurfaceView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/preview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

我仍然无法在整个屏幕上预览我的相机。我想知道如何在整个屏幕上预览。

4

4 回答 4

3

我发现了问题。我在 Android Manifest 文件中添加了以下设置

<supports-screens android:largeScreens="true"
                    android:normalScreens="true"
                    android:smallScreens="true" android:xlargeScreens="true"/>

我可以全屏查看相机。

于 2012-07-04T05:11:31.777 回答
0

我假设您的代码位于扩展 SurfaceView 的类中,并且您将把 surfaceView 放置在与显示器一样大的 FrameLayout 中。

您在代码中没有做的是将 SurfaceView 设置为与以下代码块中的显示相同的大小,这是通过获取布局并设置宽度和高度来完成的。

我使用以下代码拉伸到屏幕的尺寸:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {

    ...

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

      ...

      final DisplayMetrics dm = this.getResources().getDisplayMetrics();
      Camera.Parameters parameters = mCamera.getParameters();
      parameters.setPreviewSize(cameraSize.width, cameraSize.height);
      mCamera.setParameters(parameters);
      //Here you get the SurfaceView layout and subsequently set its width and height
      FrameLayout.LayoutParams frameParams = (FrameLayout.LayoutParams) this.getLayoutParams();
      frameParams.width = LayoutParams.MATCH_PARENT;// dm.widthPixels should also work
      frameParams.height = LayoutParams.MATCH_PARENT;//dm.heightPixels should also work
      this.setLayoutParams(frameParams);
      //And we should have things set now...

      ....

    }

    ...
}

我希望这有帮助。整合的关键部分在那些内部评论之间

于 2012-07-04T03:49:09.513 回答
0

获取屏幕尺寸

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

使用这个宽度和高度来获得预览大小。

于 2018-03-13T08:06:26.963 回答
-1

首先,获取显示宽度和高度:

   int dw = currentDisplay.getWidth();    // dw == display width
   int dh = currentDisplay.getHeight();   // dh == display height

然后遍历支持的预览尺寸,并在 if (size.width <= dw && size.height <= dh) 中选择最大的那个。当您遇到此 if 语句失败的情况时,请使用先前的值(您可以设置 prevWidth 和 prevHeight 之类的值作为一种快速/简单的方法来退一步……只要记住在测试它们之后设置它们;之后达到大于屏幕尺寸的预览尺寸,只需跳出循环即可。

后来,
--jim

于 2012-07-02T03:16:00.790 回答