我做了一个应该显示相机预览的surfaceview。然而,当我用我的虚拟安卓手机打开它时,我得到一个方格的黑白背景和一个大的移动绿色框而不是实际的相机图像。
以下是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