Dónde colocar el autofoco en la cámara de la clase android

Estoy tratando de usar autofoucs no tengo ni idea de dónde colocar autofoco nadie tiene una idea de cómo implementar autofocus?

———- clase de vista previa ———-

package com.marakana; import java.io.IOException; import android.content.Context; import android.hardware.Camera; import android.hardware.Camera.PreviewCallback; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; class Preview extends SurfaceView implements SurfaceHolder.Callback { // <1> private static final String TAG = "Preview"; SurfaceHolder mHolder; // <2> public Camera camera; // <3> Preview(Context context) { super(context); // Install a SurfaceHolder.Callback so we get notified when the // underlying surface is created and destroyed. mHolder = getHolder(); // <4> mHolder.addCallback(this); // <5> mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // <6> } // Called once the holder is ready public void surfaceCreated(SurfaceHolder holder) { // <7> // The Surface has been created, acquire the camera and tell it where // to draw. camera = Camera.open(); // <8> try { camera.setPreviewDisplay(holder); // <9> camera.setPreviewCallback(new PreviewCallback() { // <10> // Called for each frame previewed public void onPreviewFrame(byte[] data, Camera camera) { // <11> Log.d(TAG, "onPreviewFrame called at: " + System.currentTimeMillis()); Preview.this.invalidate(); // <12> } }); } catch (IOException e) { // <13> e.printStackTrace(); } } // Called when the holder is destroyed public void surfaceDestroyed(SurfaceHolder holder) { // <14> camera.stopPreview(); camera = null; } // Called when holder has changed public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // <15> camera.startPreview(); } } 

—————– actividad de la cámara ————————

 preview = new Preview(this); // <3> ((FrameLayout) findViewById(R.id.preview)).addView(preview); // <4> buttonClick = (Button) findViewById(R.id.buttonClick); buttonClick.setOnClickListener(new OnClickListener() { public void onClick(View v) { // <5> preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); } }); // Handles data for jpeg picture PictureCallback jpegCallback = new PictureCallback() { // <8> public void onPictureTaken(byte[] data, Camera camera) { FileOutputStream outStream = null; try { // Write to SD Card outStream = new FileOutputStream(imgPath); // <9> outStream.write(data); outStream.close(); intImg = new Intent(CameraActivity.this, DisplayImg.class); intImg.putExtra("imgPath",imgPath); startActivity(intImg); Log.d(TAG, "onPictureTaken - wrote bytes: " + data.length); } catch (FileNotFoundException e) { // <10> e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { } Log.d(TAG, "onPictureTaken - jpeg"); } }; 

Si usted tiene autofocus fijado, usted debe hacer algo como esto:

 camera.autoFocus(new AutoFocusCallback() { @Override public void onAutoFocus(boolean success, Camera camera) { if(success){ camera.takePicture(shutterCallback, rawCallback, jpegCallback); } } }); 

Esa es la forma en que la cámara espera el autofoco;)

Desde API nivel 9 se puede implementar el enfoque automático de esta manera (automáticamente):

En el método surfaceChanged() , realice los siguientes cambios:

  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Set camera properties first Camera.Parameters parameters = camera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE); camera.setParameters(parameters); camera.startPreview(); camera.autoFocus(null); } 

Puedes usarlo justo antes de tomar una foto.

 preview.camera.autoFocus(null) // you can make optional callback once focus is achieved preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback); 

En la superficie cambiada y antes de la vista previa, se puede utilizar el ajuste de enfoque automático que establecerá la distancia focal automáticamente, luego iniciar la vista previa y, a continuación, enfoque automático en lo que se muestra.

 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { // Set camera properties first Camera.Parameters parameters = camera.getParameters(); parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); camera.setParameters(parameters); camera.startPreview(); camera.autoFocus(null); } 
  • La cámara no reemplaza la imagen antigua si cambia la orientación
  • Obtener la rotación de ExifInterface siempre devuelve 0
  • ¿Cómo usar setCamera (MediaRecorder)?
  • ¿Cómo iniciar la cámara frontal con intención?
  • Guardar la imagen capturada en la carpeta específica de la tarjeta sd
  • Excepción de puntero nulo en la intención de la cámara cuando elijo una cámara de terceros
  • Cámara de Android ICS emulador
  • Cómo hacer que el selector de intenciones para la aplicación de cámara o galería en android como whatsapp editprofile?
  • ¿Cómo obtener resoluciones de cámara de vídeo compatibles en android?
  • Flash Torch en Google Nexus 5
  • Actividad de la cámara que devuelve nulo a Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.