2010-11-16 78 views
7

Je suis actuellement en train d'essayer de construire une application android pour prendre des photos et j'ai besoin de geler l'aperçu de la caméra sur un événement donné (photo prise) et de le redémarrer seulement après un autre événement. Ce que je veux, en d'autres termes, c'est que la vue affiche tout ce que la caméra voit jusqu'à ce que l'événement de gel se produise et ensuite geler l'image (c'est-à-dire afficher tout ce qui était sur l'écran au moment de cet événement). une photo a été prise) jusqu'à ce que l'événement de dégel se produise.Android Camera Preview - Comment «geler» l'appareil photo?

Maintenant, j'utilise un SurfaceView avec un SurfaceHolder.Callback pour le faire et j'ai essayé d'utiliser un PreviewCallback pour figer l'écran, mais malheureusement, je ne trouve pas d'exemple ou de tutoriel et je suis vraiment coincé à ce stade.

Si quelqu'un a un guide ou quelques conseils sur la façon de ce faire, je voudrais vraiment apprécier l'aide ...

Je coller les parties pertinentes de mon code ci-dessous:

public class CustomCameraView étend 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); 
} 

}

Merci beaucoup pour votre aide!

-Billy

Répondre

14

question Vieux, je sais, mais répondant à la postérité. Vous devriez être en mesure d'appeler simplement

camera.stopPreview(); 

L'aperçu gèlera sur tout ce que vous regardez jusqu'à ce que vous appelez startPreview() à nouveau.