Corregir la relación de aspecto y la rotación de la aplicación de la cámara Android

Cómo se ve: http://i41.tinypic.com/30278m1.png

Parece que en la imagen, quiero que tenga una relación de aspecto correcta con rotaion correcto

Echa un vistazo al código por favor, ¿cómo puedo solucionarlo?

Este es mi código:

public class MainActivity extends Activity implements SurfaceHolder.Callback { Camera mCamera; SurfaceView mPreview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mPreview = (SurfaceView)findViewById(R.id.preview); mPreview.getHolder().addCallback(this); mPreview.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mCamera = Camera.open(); } @Override public void onPause() { super.onPause(); mCamera.stopPreview(); } @Override public void onDestroy() { super.onDestroy(); mCamera.release(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Camera.Parameters params = mCamera.getParameters(); List<Camera.Size> sizes = params.getSupportedPreviewSizes(); Camera.Size selected = sizes.get(0); params.setPreviewSize(selected.width,selected.height); mCamera.setParameters(params); mCamera.startPreview(); } @Override public void surfaceCreated(SurfaceHolder holder) { try { mCamera.setPreviewDisplay(mPreview.getHolder()); } catch (Exception e) { e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.i("PREVIEW","surfaceDestroyed"); } } 

Cambie su método surfaceChanged con esto:

 @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Parameters parameters = mCamera.getParameters(); List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); Camera.Size previewSize = previewSizes.get(4); //480h x 720w parameters.setPreviewSize(previewSize.width, previewSize.height); parameters.setFlashMode(Parameters.FLASH_MODE_AUTO); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); mCamera.setParameters(parameters); Display display = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); if(display.getRotation() == Surface.ROTATION_0) { mCamera.setDisplayOrientation(90); } else if(display.getRotation() == Surface.ROTATION_270) { mCamera.setDisplayOrientation(180); } mCamera.startPreview(); } 

¡Espero haberlo ayudado!

  • ¿Cómo pasar la vista previa de la cámara a la superficie creada por MediaCodec.createInputSurface ()?
  • Error al inflarse al extender una clase
  • Crear ImageView de forma programática sin diseño
  • Canvas en SurfaceView - Aceleración de hardware
  • SuperficieCreada () Nunca llamado
  • Cómo tomar una foto (instantánea) mientras el video se ha grabado con la vista de la superficie
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.