1

我制作了一个应该显示相机预览的表面视图。然而,当我用我的虚拟安卓手机打开它时,我得到一个黑白格子背景和一个大的移动绿色框,而不是实际的相机图像。

这是表面视图的代码:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback{

private Camera camera;
private SurfaceHolder surfaceholder;

public CameraPreview(Context context) {
    super(context);
    surfaceholder= getHolder();
    surfaceholder.addCallback(this);
    surfaceholder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)   {
    Camera.Parameters parameters = camera.getParameters();
    parameters.setPreviewSize(width, height);
    parameters.setPictureFormat(PixelFormat.JPEG);
    camera.setParameters(parameters);
    camera.startPreview();      
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
    camera = Camera.open();
    try {
        camera.setPreviewDisplay(surfaceholder);
    } catch (IOException e) {}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    stopCam();
}
public void stopCam(){
    if (camera!=null){
        camera.stopPreview();
        camera.release();
    }
}
 }
4

1 回答 1

2

我将假设“虚拟安卓手机”是指模拟器。您的代码没有任何问题,因为模拟器不支持大部分相机(有一些特殊例外),并且当模拟器没有要加载的相机时,它会显示该动画来模拟相机预览.

AFAIK,在模拟器中获得实际主摄像头支持的唯一方法是在 Mac OS X 上使用 4.0.x 模拟器图像。在这种情况下,它可以检测并使用内置的 iSight 摄像头。否则,您将需要编写特殊代码来支持与模拟器的网络摄像头连接,如本文所述:http ://www.tomgibara.com/android/camera-source

高温高压

于 2012-06-19T19:31:28.773 回答