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
- SurfaceHolder.lockCanvas () toma demasiado tiempo para mi aplicación de juego
- Reabrir la cámara después de cancelar el selector de intenciones
- La eficiencia sobre el dibujo de lienzo android
- Invisible SurfaceView para previsualización de la cámara
- agregar imagen a la vista de la superficie en android
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"); } }
- ¿Es OpenGL en Android un asesino de la batería?
- Android: ¿Cómo hacer una vista previa de cámara en forma de círculo?
- ¿Cómo hacer un SurfaceView siempre horizontal?
- La cámara Android no funcionará. StartPreview falla
- Imagen de leva en el soporte de superficie, dibujar: Excepción debido al tipo de superficie
- Android: onPreviewFrame nunca llamado sin SurfaceView
- Cómo escalar el video en un SurfaceView más grande que la ventana en Android?
- Cámara Android: la aplicación superó la superficie NULL
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 se valida AndroidManifest.xml en android studio?
- ¿Existe un archivo de clase universal o "grasa" para Java?