Android相机预览--如何“冻结”相机?

8
我目前正在尝试构建一个安卓应用程序来拍照,我需要在给定事件(即拍照)时冻结相机预览,并在另一个事件发生后重新启动它。
换句话说,我希望视图显示相机所看到的内容,直到冻结事件发生,然后冻结图像(即显示此事件时屏幕上的内容 - 就像拍照一样),直到解冻事件发生。
目前,我正在使用SurfaceView和SurfaceHolder.Callback来实现这一点,并尝试使用PreviewCallback来冻结屏幕,但不幸的是,我找不到示例或教程,我真的卡在这一点上了。
如果有人有指南或关于如何完成此操作的指针,我将非常感激您的帮助...
以下是我代码的相关部分: public class CustomCameraView extends 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

1个回答

15

虽然这是一个旧问题,但为了后人着想而回答。你应该能够简单地调用

camera.stopPreview();

预览界面会冻结在你最后查看的画面上,直到你再次调用startPreview()方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接