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 vista previa de la cámara está en modo vertical, pero la imagen capturada se gira
  • La cámara se bloquea inesperadamente en el nexo de la galaxia
  • Objetivo de la cámara de Android
  • Detección de color con la cámara Android
  • Apertura de la cámara en modo vertical con Intent
  • Listar todas las imágenes de la cámara en Android
  • ¿Está correctamente documentada la CameraInfo.orientation de Android? ¿Implementado incorrectamente?
  • Tome y guarde la imagen presionando el botón
  • Cómo cambiar la cámara de la parte delantera a la parte posterior y posterior a la parte delantera en el botón haga clic en android
  • Cómo acceder a la cámara en Android 6.0 Marshmallow?
  • Cómo activar la luz del flash de la cámara de forma programática en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.