1

我成功创建了一个相机表面视图,它在应用程序启动/重新启动时工作。但它只是显示一个黑屏,在我暂停游戏并恢复它(按主屏幕)之后。我在这里错过了什么吗?

这是表面的代码(从主活动创建:

public class CameraView extends SurfaceView implements SurfaceHolder.Callback{

static Camera camera = null;
Surface camSurface;
String TAG = "CameraView";
static SurfaceHolder mHolder;

public CameraView(Context context) {
    super(context);
    getHolder().addCallback(this);
    getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    // TODO Auto-generated constructor stub
}

@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void surfaceCreated(SurfaceHolder arg0) {
    // TODO Auto-generated method stub

    Log.e(TAG, "Camera view created");

    mHolder = getHolder();

    if(camera == null){
        camera = Camera.open();
    }

    if(camera == null){
        Log.e(TAG, "Null camera");
    }

    try {
        camera.setPreviewDisplay(getHolder());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        camera.release();
        camera = null;
        e.printStackTrace();
    }

}

@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
    // TODO Auto-generated method stub
    synchronized(mHolder){
        if(camera!=null){
            camera.stopPreview();
            camera.release();
            camera = null;
        }
    }
}
}
4

1 回答 1

1

当您离开并返回您的应用程序时,您仍然需要在某些时候调用 camera.startPreview()。我会在我的 surfaceChanged() 方法中使用它。

确保您有一个有效的相机实例,就像您第一次启动它时一样。

于 2013-05-29T03:37:16.683 回答