Estirar la vista previa de la cámara a pantalla completa en Android

Estoy usando esto sala de previsualización aplicación para mi aplicación de Android.

Quiero la vista previa de la cámara en pantalla completa. Por lo tanto, utilicé el ejemplo de las API de Android para intentar configurar la vista previa en pantalla completa. Así es como estoy tratando de hacerlo:

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;
    }

Estoy usando un diseño relativo como mi diseño. Mi configuración de diseño es la siguiente:

<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"
>

Todavía no puedo obtener una vista previa de mi cámara en toda la pantalla. Me gustaría saber cómo obtener una vista previa en toda la pantalla.

preguntado el 30 de junio de 12 a las 23:06

4 Respuestas

Encontré el problema. Agregué la siguiente configuración al archivo de manifiesto de Android

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

Puedo ver la cámara en pantalla completa.

Respondido 04 Jul 12, 06:07

Hola, ¿también tienes el problema de que en pantalla completa la imagen de vista previa de la cámara está sesgada/estirada para caber en la pantalla? stackoverflow.com/questions/16727836/… Gracias - Paul

Supongo que su código está dentro de una clase que extiende SurfaceView y que colocará el SurfaceView dentro de un FrameLayout que es tan grande como la pantalla.

Lo que no está haciendo en su código es configurar su SurfaceView para que tenga el mismo tamaño que la pantalla, lo que en el siguiente bloque de código se realiza obteniendo el diseño y configurando el ancho y el alto.

Yo uso el siguiente código para estirar a las dimensiones de la pantalla:

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...

      ....

    }

    ...
}

Espero que esto ayude. Las partes clave para integrar están entre esos comentarios internos

Respondido 04 Jul 12, 04:07

Hola, ¿también tienes el problema de que en pantalla completa la imagen de vista previa de la cámara está sesgada/estirada para caber en la pantalla? stackoverflow.com/questions/16727836/… Gracias - Paul

Obtener las dimensiones de la pantalla.

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

use este ancho y alto para obtener el tamaño de vista previa.

respondido 13 mar '18, 08:03

Primero, obtenga el ancho y alto de la pantalla:

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

Luego recorra los tamaños de vista previa admitidos y elija el más grande donde, si (tamaño.ancho <= dw && tamaño.alto <= dh). Cuando llegue a uno en el que esta declaración if falle, use los valores anteriores (puede establecer algo como prevWidth y prevHeight como una forma rápida/fácil de retroceder uno... solo recuerde establecer cada uno de ellos DESPUÉS de probarlos; después de alcance un tamaño de vista previa que sea más grande que el tamaño de la pantalla, simplemente salga del bucle.

Más tarde,
--jim

Respondido 02 Jul 12, 04:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.