【问题标题】:Stretching camera preview to full screen in android在android中将相机预览拉伸到全屏
【发布时间】:2012-07-01 22:58:18
【问题描述】:

我将这个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"
>

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

【问题讨论】:

    标签: android android-layout android-camera


    【解决方案1】:

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

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

    我可以全屏查看相机。

    【讨论】:

    【解决方案2】:

    我假设您的代码位于扩展 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...
    
          ....
    
        }
    
        ...
    }
    

    我希望这会有所帮助。要集成的关键部分是在那些内部 cmets 之间

    【讨论】:

    • 您好,您是否也有这样的问题,即全屏时相机预览图像会倾斜/拉伸以适应屏幕? stackoverflow.com/questions/16727836/...谢谢
    【解决方案3】:

    获取屏幕尺寸

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

    使用这个宽度和高度来获得预览尺寸。

    【讨论】:

      【解决方案4】:

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

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

      然后循环浏览支持的预览尺寸,并选择最大的一个,如果 (size.width

      稍后,
      --吉姆

      【讨论】:

        猜你喜欢
        • 2021-01-20
        • 2019-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多