2012-10-12 10 views
8

Ho intenzione di impostare la mia app per Android aprendo la fotocamera e attivare la messa a fuoco manuale toccando il punto nella fotocamera. La fotocamera può rimettere a fuoco il punto in cui ho puntato lo schermo. Potresti dirmi la metodologia o il componente con cui dovrei iniziare a modificare?Messa a fuoco manuale delle impostazioni Android toccando

Qui di seguito è il mio codice:

public void takePhoto(File photoFile, String workerName, int width, int height, int quality) { 
    if (getAutoFocusStatus()){ 
     camera.autoFocus(new AutoFocusCallback() { 
      @Override 
      public void onAutoFocus(boolean success, Camera camera) { 
       camera.takePicture(shutterCallback, rawCallback, jpegCallback); 
      } 
     }); 
    }else{ 
     camera.takePicture(shutterCallback, rawCallback, jpegCallback); 
    } 

this.photoFile = photoFile; 
this.workerName = workerName; 
this.imageOutputWidth = width; 
this.imageOutputHeight = height; 
} 

public void takePhoto(File photoFile, int width, int height, int quality) { 
takePhoto(photoFile, null, width, height, quality); 
} 
+0

Credo che quello che vuoi si chiama _assisted_ focus. http://en.wikipedia.org/wiki/Manual_focus, Manual Focus è impossibile: http://android.stackexchange.com/questions/2042/can-i-manually-focus-the-camera-on-my-android -phone (a partire da alcuni anni fa) – Annan

risposta

11

Anche se questa risposta non mostra come concentrarsi su una singola area, è sicuramente utile per mostrare in che modo esattamente mettere a fuoco la fotocamera per cominciare.

Ecco cosa ho fatto. Questo funziona sul mio dispositivo (DNA Droid da HTC), costruita nel Android Studio

In entrambi OnSurfaceChanged() e OnSurfaceCreated(), ho il seguente codice: (mCamera è il mio privato Camera oggetto)

 mCamera.stopPreview(); 
     Camera.Parameters p = mCamera.getParameters(); 
     p.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); 

     mCamera.setParameters(p); 
     mCamera.setPreviewDisplay(surfaceHolder); 
     mCamera.startPreview(); 
     mCamera.autoFocus(null); 

Nel costruttore, è necessario inserire

 setFocusable(true); 
     setFocusableInTouchMode(true); 

Ciò consentirà di ricevere eventi di messa a fuoco. Per quanto riguarda catturarli ...

public boolean onTouchEvent(MotionEvent event){ 
    if(event.getAction() == MotionEvent.ACTION_DOWN){ 
     Log.d("down", "focusing now"); 

     mCamera.autoFocus(null); 
    } 

    return true; 
} 
+1

IMO questa risposta non risolve la domanda, imposta solo l'autofocus (null). Non mette a fuoco la fotocamera nel punto selezionato – Hugo

+0

Hai ragione. Inoltre, questa API per la fotocamera è ora priva di API 21 http://developer.android.com/reference/android/hardware/Camera.html – Nlinscott

+0

non funziona in htc one –

0

La chiave qui è quello di chiamare camera.autoFocus (autoFocusCallBack) e dopo ci siamo concentrati metodo autofocusCallback.onAutoFocus (successo booleano, fotocamera Camera) si chiama - chiamare il camera.takePicture (otturatore Camera.ShutterCallback, Camera.PictureCallback crudo, Camera.PictureCallback jpeg)

Guarda anche: http://achorniy.wordpress.com/2009/12/29/how-to-use-autofocus-in-android/

o

In superficie cambiato e prima di anteprima, è possibile utilizzare la messa a fuoco automatica impostazione che consentirà di definire automaticamente la distanza focale, quindi avviare l'anteprima, e poi auto- concentrarsi su ciò che viene visualizzato ...

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); 

} 

credito: where to put autofocus in the class android camera

+0

Quindi, se aggiungo l'evento arg per toccare lo schermo e poi richiamo AutoFocus Again e questo risolve il mio problema? –

1

hai provato a utilizzare setFocusAreas() per impostare la zona di messa a fuoco dove l'utente ha toccato?

Problemi correlati