在Android中将相机预览拉伸到全屏

时间:2012-06-30 22:50:14

标签: android android-layout android-camera

我正在将此camera preview应用程序用于我的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 个答案:

答案 0 :(得分:3)

我发现了问题。我将以下设置添加到Android清单文件

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

我可以全屏查看相机。

答案 1 :(得分:0)

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

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

然后循环浏览支持的预览尺寸,并选择最大的一个,如果 (size.width&lt; = dw&amp;&amp; size.height&lt; = dh)。当你点击这个if语句时 失败,使用以前的值(你可以设置类似prevWidth和prevHeight 作为一个快速/简单的方法退后一个...只记得设置每个后 你测试它们;在您点击大于屏幕尺寸的预览尺寸后,只需 打破了循环。

后来,
   --Jim

答案 2 :(得分: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...

      ....

    }

    ...
}

我希望这会有所帮助。要整合的关键部分是那些内部评论

答案 3 :(得分:0)

获取屏幕尺寸

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

使用此宽度和高度来获取预览尺寸。