2010-11-16 14 views
7

Obecnie próbuję zbudować aplikację na Androida do robienia zdjęć i potrzebuję zatrzymać podgląd kamery na danym zdarzeniu (np. Zdjęcie zrobione) i uruchomić go ponownie po kolejnym wydarzeniu.Podgląd aparatu z Androidem - jak "zamrozić" aparat?

Innymi słowy, chcę, aby widok wyświetlał wszystko, co widzi kamera, aż do wystąpienia zamrożenia obrazu, a następnie zamroził obraz (tj. Wyświetlał wszystko, co było na ekranie w momencie tego wydarzenia - tak jakby zdjęcie zostało zrobione) do momentu wystąpienia zdarzenia odmrażania.

Teraz używam SurfaceView z SurfaceHolder.Callback aby to zrobić i spróbowałem użyć PreviewCallbacka do zatrzymania ekranu, ale niestety, nie mogę znaleźć przykładu lub samouczka i jestem Naprawdę utknąłem w tym punkcie.

Jeśli ktoś ma instrukcji lub kilka wskazówek, w jaki sposób, aby to zrobić, ja naprawdę doceniam pomoc ...

jestem wklejając odpowiednie części mojego kodu poniżej:

public class CustomCameraView rozciąga 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); 
} 

}

Dziękuję bardzo za pomoc!

-Billy

Odpowiedz

14

Stare pytanie, wiem, ale odpowiadając dla potomności. Powinieneś być w stanie po prostu zadzwonić

camera.stopPreview(); 

Podgląd zamarznie na co patrzysz, aż zadzwonisz startPreview() ponownie.