我正在尝试编写一个显示android中相机表面预览的类。我试过以下代码。但是预览没有显示出来。我试过更改参数但没有运气。我已经完成了logcat。没有显示任何内容,没有错误或警告。仅显示黑屏。该应用程序不会崩溃。
public class Preview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder holder;
private Camera camera;
public Preview(Context context, Camera camera) {
super(context);
this.camera = camera;
holder = getHolder();
holder.addCallback(this);
holder.setFixedSize(50, 50);
}
public void surfaceCreated(SurfaceHolder holder) {
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
Log.d("error", "Can't set camera preview: " + e.getMessage());
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (this.holder.getSurface() == null) {
return;
}
try {
camera.stopPreview();
} catch (Exception e) {
}
try {
camera.setPreviewDisplay(this.holder);
camera.startPreview();
} catch (Exception e) {
Log.d("DG_DEBUG", "Error starting camera preview: " + e.getMessage());
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
}
答案 0 :(得分:0)
这里的问题似乎是你没有包括持有人的类型。您需要将类型设置为SURFACE_TYPE_PUSH_BUFFERS
。添加回调后使用下面的行
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
所以你的构造函数应该如下所示
public Preview(Context context, Camera camera) {
super(context);
this.camera = camera;
holder = getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
holder.setFixedSize(50, 50);
}
我试过了代码。它现在完美运作。