Vista previa de la cámara Android: relación de aspecto 1: 1, ¿cómo?

Hola Estoy intentando utilizar la cámara para capturar una imagen en una de mis aplicaciones. Lo que es especial es que necesito un área cuadrada de vista previa (y una foto al final). Traté de definir el tamaño de la imagen y la vista previa a 1: 1 proporciones de píxeles, pero nada de costuras para trabajar. No importa lo que haga la imagen se ve "aplastado" en un cuadrado.

Cualquier persona que tiene alguna idea sobre cómo resolver esto?

código:

public class AddFromCameraActivity extends Activity implements SurfaceHolder.Callback { private Camera mCamera; private Parameters mParameters; private SurfaceView mCameraPreview; private SurfaceHolder mSurfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.addimagefromcameramain); initialise(); //Testing area mCamera = Camera.open(); mParameters = mCamera.getParameters(); mParameters.setFlashMode(Camera.Parameters.FLASH_MODE_AUTO); mParameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); mParameters.setJpegQuality(50); mParameters.setJpegThumbnailQuality(50); mParameters.setPictureSize(1024, 1024); //mParameters.setPreviewFormat(ImageFormat.JPEG); mParameters.setJpegThumbnailSize(256, 256); mParameters.setPreviewSize(500, 500); mCamera.setParameters(mParameters); } private void initialise() { mCameraPreview = (SurfaceView)findViewById(R.id.cameraSurfaceView); mSurfaceHolder = mCameraPreview.getHolder(); mSurfaceHolder.addCallback(this); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mSurfaceHolder.setFixedSize(500, 500); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) { try { mCamera.setPreviewDisplay(mSurfaceHolder); mCamera.startPreview(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera.release(); } @Override public void onPause() { mCamera.release(); } } 

Gracias

Puedes echar un vistazo al código de ejemplo de CameraPreview del SDK de Android. El método getOptimalPreviewSize muestra cómo tratar diferentes tamaños de cámara y el método onLayout muestra cómo configurar la superficie de vista previa en la actividad.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.