カメラのプレビューを表示するサーフェスビューを作成しました。ただし、仮想 Android フォンで開くと、実際のカメラ画像ではなく、市松模様の白黒の背景と大きな動く緑色のボックスが表示されます。
サーフェスビューのコードは次のとおりです。
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();
}
}
}