2010-11-16 94 views
7

我目前正在尝试构建一个android应用程序来拍照,并且我需要冻结给定事件(即拍摄的照片)上的相机预览,并且只有在另一个事件后才能重新启动它。换句话说,就是让视图显示照相机看到的任何东西,直到冻结事件发生,然后冻结图像(即在该事件发生时显示屏幕上的任何东西 - 就像拍摄照片)直到解冻事件发生。Android相机预览 - 如何“冻结”相机?

现在,我正在使用一个SurfaceView与SurfaceHolder.Callback来做到这一点,我试图使用PreviewCallback来冻结屏幕,但不幸的是,我找不到一个例子或教程,我是真的停留在这一点上。

如果有人有导游或如何得到这个工作一些指点,我会很感激的帮助......

我粘贴下面我的代码的相关部分:

公共类CustomCameraView延伸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); 
} 

}

非常感谢您的帮助!

-Billy

回答

14

老问题,我知道,但回答后代。您应该可以简单地致电

camera.stopPreview(); 

预览将冻结您正在查看的任何内容,直到您再次调用startPreview()。