2012-06-19 58 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