2010-11-16 10 views
7

Attualmente sto cercando di creare un'applicazione Android per scattare foto e ho bisogno di bloccare l'anteprima della fotocamera su un dato evento (ad esempio foto scattata) e riavviarlo solo dopo un altro evento.Anteprima fotocamera Android - Come "congelare" la fotocamera?

Ciò che voglio, in altre parole, è che la vista mostri tutto ciò che la telecamera vede fino a quando si verifica l'evento freeze e quindi blocca l'immagine (cioè visualizza ciò che era sullo schermo al momento di questo evento - come se è stata scattata una foto) fino a quando si verifica l'evento unfreeze.

Ora, sto utilizzando un SurfaceView con SurfaceHolder.Callback per fare questo e ho provato a utilizzare un PreviewCallback per bloccare lo schermo, ma sfortunatamente, non riesco a trovare un esempio o un tutorial e sono davvero bloccato a questo punto.

Se qualcuno ha una guida o di alcune indicazioni su come arrivare a questo fatto, vorrei davvero apprezzare l'aiuto ...

Sto incollando le parti rilevanti del mio codice qui sotto:

public class CustomCameraView estende SurfaceView {

Camera camera; 
SurfaceHolder previewHolder; 

//Callback for the surfaceholder 
SurfaceHolder.Callback surfaceHolderListener = new SurfaceHolder.Callback() { 
    public void surfaceCreated(SurfaceHolder holder) { 
     camera=Camera.open(); 

     try 
     { 
      camera.setPreviewDisplay(previewHolder); 
     } 
     catch (Throwable t) { 

     } 
    } 

    public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int w, int h) 
    { 
     Parameters params = camera.getParameters(); 
     params.setPictureFormat(PixelFormat.JPEG); 
      camera.setParameters(params); 
      camera.startPreview(); 
    } 

    public void surfaceDestroyed(SurfaceHolder arg0) 
    { 
     camera.stopPreview(); 
     camera.release(); 
    } 
}; 
public CustomCameraView(Context ctx) 
{ 
    super(ctx); 

    previewHolder = this.getHolder(); 
     previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     previewHolder.addCallback(surfaceHolderListener); 
     setBackgroundColor(Color.TRANSPARENT); 
} 
public CustomCameraView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
} 
protected void onDraw (Canvas canvas) 
{ 
} 
public void closeCamera() 
{ 
    if(camera != null) 
     camera.release(); 
} 
public void dispatchDraw(Canvas c) 
{ 
    super.dispatchDraw(c); 
} 

}

La ringrazio molto per il vostro aiuto!

-Billy

risposta

14

vecchia questione, lo so, ma di rispondere per i posteri. Si dovrebbe essere in grado di chiamare semplicemente

camera.stopPreview(); 

L'anteprima si blocca su qualsiasi cosa tu stia guardando fino alla chiamata startPreview() di nuovo.