2012-06-19 76 views
1

我做了一个应该显示相机预览的表面视图。但是,当我用我的虚拟Android手机打开它时,我得到了一个方格黑白背景和一个大的移动绿色框,而不是实际的相机图像。Android相机预览不能在虚拟手机中工作

下面是surfaceview代码:

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(); 
    } 
} 
} 
+0

什么实际的相机?你有连接摄像头? –

回答

2

我要去承担的“虚拟的Android手机”是指仿真器。代码没有问题,因为大多数相机在仿真器中不受支持(有几个特例),并且当模拟器没有加载相机时,它会显示该动画而不是模拟相机预览。 AFAIK,在仿真器中获得实际主摄像头支持的唯一方法是在Mac OS X上使用4.0.x仿真器图像。在这种情况下,它可以检测和使用内置的iSight摄像头。否则,你就需要编写特殊的代码来支持网络摄像头连接到模拟器喜欢这篇文章解释说:http://www.tomgibara.com/android/camera-source

HTH

+0

好的,非常感谢 – Isaac