2010-11-16 19 views
7

Actualmente estoy intentando crear una aplicación de Android para tomar fotos y necesito congelar la vista previa de la cámara en un evento dado (es decir, una foto tomada) y reiniciarlo solo después de otro evento.Android Camera Preview - Cómo congelar la cámara?

Lo que quiero, en otras palabras, es que la vista muestre lo que ve la cámara hasta que ocurra el congelamiento y luego congelar la imagen (es decir, mostrar lo que estaba en pantalla en el momento de este evento, como se tomó una foto) hasta que ocurra el evento de descongelamiento.

Ahora, estoy usando SurfaceView con SurfaceHolder.Callback para hacer esto y traté de usar una PreviewCallback para congelar la pantalla, pero desafortunadamente, no puedo encontrar un ejemplo o un tutorial y estoy realmente estancado en este punto.

Si alguien tiene una guía o algunos consejos sobre cómo hacer esto, realmente apreciaría la ayuda ...

estoy pegando las partes pertinentes de mi código de abajo:

clase pública CustomCameraView extiende 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); 
} 

}

muchas gracias por su ayuda!

-Billy

Respuesta

14

vieja pregunta, lo sé, pero respondiendo a la posteridad. Usted debe ser capaz de llamar simplemente

camera.stopPreview(); 

La vista previa se congelará en lo que usted está buscando en hasta que llame startPreview() de nuevo.

Cuestiones relacionadas