vista studio rotar rotación rotacion programacion pantalla orientacion manejando lite horizontal forzar detectar como cambio java android camera landscape stretched

java - studio - Cámara android estirada en modo horizontal.



rotacion de pantalla android studio (2)

La aplicación que estoy escribiendo requiere la funcionalidad de la cámara. Entonces, para aprender acerca de cómo operar la cámara, seguí este guión:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

Puse la actividad en mi manifiesto, configuré la orientación de la pantalla en modo horizontal.

El problema que tengo es que cuando la cámara se sostiene de lado (por lo tanto, sostengo mi Galaxy Tab P1000 en posición horizontal), la vista se estira.

Para ser más específico acerca de mi script, utilicé una copia exacta del código que hizo Google. Se puede encontrar en android-sdk / samples / android-8 / ApiDemos / src / com / example / android / apis / graphics /

El archivo en sí se llama CameraPreview.

Realmente no tengo ni idea de por qué la pantalla se ve tan estirada. Por supuesto, el formato es extraño y no es cuadrado, pero aún así, cuando se usa la aplicación de cámara predeterminada instalada en el dispositivo, no se deforma en absoluto. Esta cámara deforma la imagen cuando la sostengo de lado y muevo la cámara aunque sea un poco.

Lo que hice fue: sostuve la pestaña de la galaxia para tomar una foto de un objeto (computadora portátil en este caso) y luego tomé una foto con mi teléfono de mi Galaxy. En el Galaxy tengo la pantalla de la cámara abierta en la aplicación que estoy haciendo. Esto cuenta para ambas imágenes. Uno que sostengo de lado y otro que sostengo en vista de retrato. Las fotos no están claras, pero puedes ver que en la imagen del paisaje, la cámara se ha vuelto masivamente ancha.


Ayer enfrenté el mismo problema. Después de investigar las fuentes de "Cámara", encontré una razón para que la vista previa de la cámara se estirara.

La razón es: la relación de aspecto SurfaceView (ancho / alto) DEBE ser la misma que la relación de aspecto de tamaño de cámara utilizada en los parámetros de vista previa. Y si la relación de aspecto no es la misma, tienes la imagen estirada.

Por lo tanto, la solución más rápida es configurar SurfaceView para que tenga un tamaño de 320px x 240px: el tamaño más pequeño admitido de Parameters.getSupportedPreviewSizes ().

Además, puede consultar las fuentes de aplicación estándar de la cámara, utiliza el diseño personalizado para controlar el tamaño de SurfaceView (consulte PreviewFrameLayout.java, onMeasure () function).

Utilizar

git clone https://android.googlesource.com/platform/packages/apps/Camera.git

para obtener las fuentes de la cámara.


public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub try { camera = Camera.open(); camera.setDisplayOrientation(90); camera.setPreviewDisplay(holder); Camera.Parameters parameters = camera.getParameters(); List<Size> sizes = parameters.getSupportedPictureSizes(); parameters.setPictureSize(sizes.get(0).width, sizes.get(0).height); // mac dinh solution 0 parameters.set("orientation","portrait"); //parameters.setPreviewSize(viewWidth, viewHeight); List<Size> size = parameters.getSupportedPreviewSizes(); parameters.setPreviewSize(size.get(0).width, size.get(0).height); camera.setParameters(parameters); camera.startPreview(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

Solo necesita getSupportedPreviewSizes() y guardarlo en una List :

List<Size> size = parameters.getSupportedPreviewSizes(); parameters.setPreviewSize(size.get(0).width, size.get(0).height); camera.setParameters(parameters); camera.startPreview();

Espero que esto te ayude.